Typescript 我可以做tsc吗;“固定折叠”;当类型检查索引器签名时?

Typescript 我可以做tsc吗;“固定折叠”;当类型检查索引器签名时?,typescript,Typescript,考虑使用--noImplicitAny编译的以下代码: interface T { ax: any, bx: any, } const prefixes: ("a" | "b")[] = ["a", "b"]; const keys: ("ax" | "bx")[] = ["ax", "bx"]; const t: T = { ax: "foo", bx: "bar" }; for (const key of keys) { const value = t[key];

考虑使用
--noImplicitAny
编译的以下代码:

interface T {
    ax: any,
    bx: any,
}

const prefixes: ("a" | "b")[] = ["a", "b"];
const keys: ("ax" | "bx")[] = ["ax", "bx"];
const t: T = { ax: "foo", bx: "bar" };

for (const key of keys) {
    const value = t[key]; // <- works
}

for (const prefix of prefixes) {
    const value = t[prefix + "x"]; // <- TS7017 error
}
接口T{
阿克斯:任何,
bx:任何,
}
常量前缀:(“a”|“b”)[]=[“a”,“b”];
常量键:(“ax”|“bx”)[]=[“ax”,“bx”];
常数t:t={ax:“foo”,bx:“bar”};
for(键的常数键){

const value=t[key];//否,不幸的是,TypeScript不会从对其他文字类型的操作中计算文字类型

您需要使用类型断言

const value = t[<keyof T>(prefix + "x")];
const value=t[(前缀+x”);
更详细地说,如果一个表达式的类型是
“a”
,而另一个表达式的类型是
“b”
,并且说我们分别将它们存储在变量
x
y
中,那么表达式
x+y
的类型将不会是
“ab”

如果这真的起作用,那就太好了,GitHub上有很多未解决的问题,建议添加此功能或类似功能。有人甚至建议添加正则表达式文字类型,这可能有点极端,但组合文字类型对于链接生成等场景非常有价值nd使用HTTP补丁方法,例如,强类型包装函数内部委托给
fetch