TypeScript Version: 3.8.0-dev.20191026
Search Terms:
completions, discriminated unions
Code
const A = "A";
const B = "B";
interface AAction {
type: typeof A;
payload: {
a: string;
b: string;
}
}
interface BAction {
type: typeof B;
payload: {
c: string;
d: string;
}
}
interface ActionMap {
[A]: AAction;
[B]: BAction;
}
declare function test<K extends keyof ActionMap>(key: K, payload: ActionMap[K]["payload"]): void;
test("A", { /* completion here */ })
Expected behavior:
Should give only a and b . TS 3.6.3 (haven't tested on 3.6.4) works fine
Actual behavior:
Returns a, b, c, d
Playground Link: http://www.typescriptlang.org/play/?ts=3.8.0-dev.20191025#code/FAYw9gdgzgLgBAQTgXjgIgWg3KSs4BCK6B2wwAlhDAKYBOAZgIYg2IIgwWRwDewcQXBgBPAA40AXMPE0wDRDiFwxTEQBswTACbT+y5U2mw6VAOZKDggEbGYpiBYFCAvsDeVq9Zq0IcuPPpCohLSIXIKBJaCqhpaunzOViB2Dk5Wggkm5tFwbm5UtIwsbP7cEACyTGKJygDaCAC60ghlkLl1BM1+nOU4Hto0IOpMdGwMAK4QvTy0sAA8ANJwNAAetBDaUHAA1jQi8ogzldUAfAAUeyLSiwA0KmqaOi3HVWJ1i411aLFP2miNACU0gAbmAKNocHMYOcMGh7rxBC5AUA
TypeScript Version: 3.8.0-dev.20191026
Search Terms:
completions, discriminated unions
Code
Expected behavior:
Should give only
aandb. TS 3.6.3 (haven't tested on 3.6.4) works fineActual behavior:
Returns
a, b, c, dPlayground Link: http://www.typescriptlang.org/play/?ts=3.8.0-dev.20191025#code/FAYw9gdgzgLgBAQTgXjgIgWg3KSs4BCK6B2wwAlhDAKYBOAZgIYg2IIgwWRwDewcQXBgBPAA40AXMPE0wDRDiFwxTEQBswTACbT+y5U2mw6VAOZKDggEbGYpiBYFCAvsDeVq9Zq0IcuPPpCohLSIXIKBJaCqhpaunzOViB2Dk5Wggkm5tFwbm5UtIwsbP7cEACyTGKJygDaCAC60ghlkLl1BM1+nOU4Hto0IOpMdGwMAK4QvTy0sAA8ANJwNAAetBDaUHAA1jQi8ogzldUAfAAUeyLSiwA0KmqaOi3HVWJ1i411aLFP2miNACU0gAbmAKNocHMYOcMGh7rxBC5AUA