74 lines
923 B
TypeScript
74 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
|