Test:`in` doesn't narrow types with string indexers

This commit is contained in:
Nathan Shively-Sanders 2017-12-07 10:56:33 -08:00
Родитель 4902d85479
Коммит 3a0ce3435e
4 изменённых файлов: 113 добавлений и 2 удалений

Просмотреть файл

@ -89,7 +89,22 @@ class SelfAssert {
} else {
}
}
}
}
interface Indexed {
[s: string]: any;
}
function f(i: Indexed) {
if ("a" in i) {
return i.a;
}
else if ("b" in i) {
return i.b;
}
return "c" in i && i.c;
}
//// [typeGuardOfFromPropNameInUnionType.js]
var A = /** @class */ (function () {
@ -216,3 +231,12 @@ var SelfAssert = /** @class */ (function () {
};
return SelfAssert;
}());
function f(i) {
if ("a" in i) {
return i.a;
}
else if ("b" in i) {
return i.b;
}
return "c" in i && i.c;
}

Просмотреть файл

@ -289,3 +289,33 @@ class SelfAssert {
}
}
}
interface Indexed {
>Indexed : Symbol(Indexed, Decl(typeGuardOfFromPropNameInUnionType.ts, 90, 1))
[s: string]: any;
>s : Symbol(s, Decl(typeGuardOfFromPropNameInUnionType.ts, 93, 5))
}
function f(i: Indexed) {
>f : Symbol(f, Decl(typeGuardOfFromPropNameInUnionType.ts, 94, 1))
>i : Symbol(i, Decl(typeGuardOfFromPropNameInUnionType.ts, 96, 11))
>Indexed : Symbol(Indexed, Decl(typeGuardOfFromPropNameInUnionType.ts, 90, 1))
if ("a" in i) {
>i : Symbol(i, Decl(typeGuardOfFromPropNameInUnionType.ts, 96, 11))
return i.a;
>i : Symbol(i, Decl(typeGuardOfFromPropNameInUnionType.ts, 96, 11))
}
else if ("b" in i) {
>i : Symbol(i, Decl(typeGuardOfFromPropNameInUnionType.ts, 96, 11))
return i.b;
>i : Symbol(i, Decl(typeGuardOfFromPropNameInUnionType.ts, 96, 11))
}
return "c" in i && i.c;
>i : Symbol(i, Decl(typeGuardOfFromPropNameInUnionType.ts, 96, 11))
>i : Symbol(i, Decl(typeGuardOfFromPropNameInUnionType.ts, 96, 11))
}

Просмотреть файл

@ -316,3 +316,46 @@ class SelfAssert {
}
}
}
interface Indexed {
>Indexed : Indexed
[s: string]: any;
>s : string
}
function f(i: Indexed) {
>f : (i: Indexed) => any
>i : Indexed
>Indexed : Indexed
if ("a" in i) {
>"a" in i : boolean
>"a" : "a"
>i : Indexed
return i.a;
>i.a : any
>i : Indexed
>a : any
}
else if ("b" in i) {
>"b" in i : boolean
>"b" : "b"
>i : Indexed
return i.b;
>i.b : any
>i : Indexed
>b : any
}
return "c" in i && i.c;
>"c" in i && i.c : any
>"c" in i : boolean
>"c" : "c"
>i : Indexed
>i.c : any
>i : Indexed
>c : any
}

Просмотреть файл

@ -88,4 +88,18 @@ class SelfAssert {
} else {
}
}
}
}
interface Indexed {
[s: string]: any;
}
function f(i: Indexed) {
if ("a" in i) {
return i.a;
}
else if ("b" in i) {
return i.b;
}
return "c" in i && i.c;
}