我找到了一个示例,其中tsc-3.5.3思考语句
let k : keyof typeof c = "value";
是合法的,但声明
c["value"]
不是。
我对为什么会发生这种情况或我错过了什么感到困惑。这是完整的代码段:
type A = { keys: "value1" | "value2" };
<B extends A>() => {
type C = { [ item in B["keys"] ] ?: any };
let c : C = {};
let k : keyof typeof c = "value1";
// tsc think this is legit
c[k]
// also legit
c["value1"]
// tsc complains:
// "Property 'value1' does not exist on type 'C'.ts(7053)"
};
请注意,当我将"value1"
替换为"valueX"
时,就像这样:
let k : keyof typeof c = "valueX";
tsc随后将抱怨Type '"valueX"' is not assignable to type 'B["child"]'
。
换句话说,tsc知道"value1"
是c
的合法密钥,而"valueX"
不是。
有人可以帮助我了解这是怎么发生的吗?
谢谢!