[字符串中的键]用于写入数组条目签名是什么意思?



我读到了一些带有索引签名的接口,它允许为数组编写这样的接口:

interface StringArray {
[index: number]: string;
}

我还从这个线程中看到了这个例子,它也允许以这种方式编写签名:

type ResponseKeys = 'devices' | 'languages' | 'frameworks' | 'backend';
export class Survey {
isCompleted: boolean;
response: {
[key in ResponseKeys]: string[]
};
}

但我在文档中找到了什么意思:

const [texts, setTexts] = useState<{ [key in string]: fabric.ITextboxOptions }>({
'0': { text: 'A', left: 0 },
'1': { text: 'B', left: 30 },
'2': { text: 'C', left: 60 },
});

即使当我试图阅读有关"in运算符"的内容时,我也找不到测试键是否为字符串类型的含义。有线索吗?

编辑此

interface Invalid {
[key in string]: string;
}
interface Valid {
[key: string]: string;
}
type ValidType = {
[key in string]: string;
}

游乐场

type更灵活,可以接受这两种语法。此外,[key in type]更灵活,将允许一些in没有的用途,但我手头没有。

至于它们为什么存在?我不知道。。。


原始答案:

{ [key in string]: T }是一种通配符。这意味着指定的对象必须只有字符串键。

  • 'property'正常
  • '0'正常
  • 0不是
const obj: { [key in string]: number } = {};
obj['0'] = 1; // ok
obj[0] = 1; // not ok!
obj.property = 1; // ok

最新更新