用于编写数组条目签名的 [key in string] 是啥意思?
Posted
技术标签:
【中文标题】用于编写数组条目签名的 [key in string] 是啥意思?【英文标题】:What means [key in string] used to write an array's entries signatures?用于编写数组条目签名的 [key in string] 是什么意思? 【发布时间】:2021-08-02 16:26:08 【问题描述】:我正在阅读interfaces with index signatures,它允许为数组编写这样的接口:
interface StringArray
[index: number]: string;
我还从this thread 看到了这个例子,它也允许以这种方式写签名:
type ResponseKeys = 'devices' | 'languages' | 'frameworks' | 'backend';
export class Survey
isCompleted: boolean;
response:
[key in ResponseKeys]: string[]
;
但我发现 [key in string] 是什么意思 somewhere in a doc :
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 operator”时,我也无法找到测试键是否为字符串类型的含义。 请问有什么线索吗?
【问题讨论】:
【参考方案1】:编辑这个
interface Invalid
[key in string]: string;
interface Valid
[key: string]: string;
type ValidType =
[key in string]: string;
Playground
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
【讨论】:
[index: string]: string; 不要求对象也必须有字符串键?我还想知道使用 in 运算符来表示您所说的含义。无论如何感谢您的确认以上是关于用于编写数组条目签名的 [key in string] 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
for in,Object.keys()与for of的区别
for in,Object.keys()与for of的区别