73 lines
923 B
TypeScript
73 lines
923 B
TypeScript
// @strict: true
|
|
function f(b: boolean) {
|
|
function d() {
|
|
}
|
|
d.e = 12
|
|
d.e
|
|
|
|
if (b) {
|
|
d.q = false
|
|
}
|
|
// error d.q might not be assigned
|
|
d.q
|
|
if (b) {
|
|
d.q = false
|
|
}
|
|
else {
|
|
d.q = true
|
|
}
|
|
d.q
|
|
if (b) {
|
|
d.r = 1
|
|
}
|
|
else {
|
|
d.r = 2
|
|
}
|
|
d.r
|
|
if (b) {
|
|
d.s = 'hi'
|
|
}
|
|
return d
|
|
}
|
|
// OK to access possibly-unassigned properties outside the initialising scope
|
|
var test = f(true).s
|
|
|
|
function d() {
|
|
}
|
|
d.e = 12
|
|
d.e
|
|
|
|
if (!!false) {
|
|
d.q = false
|
|
}
|
|
d.q
|
|
if (!!false) {
|
|
d.q = false
|
|
}
|
|
else {
|
|
d.q = true
|
|
}
|
|
d.q
|
|
if (!!false) {
|
|
d.r = 1
|
|
}
|
|
else {
|
|
d.r = 2
|
|
}
|
|
d.r
|
|
|
|
// test function expressions too
|
|
const g = function() {
|
|
}
|
|
if (!!false) {
|
|
g.expando = 1
|
|
}
|
|
g.expando // error
|
|
|
|
if (!!false) {
|
|
g.both = 'hi'
|
|
}
|
|
else {
|
|
g.both = 0
|
|
}
|
|
g.both
|