TypeScript中用于定义数组条目签名的[key in string]是什么含义?
该写法的具体含义
首先要明确一个区分:你查MDN看到的是JavaScript运行时的in运算符,而你在类型注解里看到的[key in string]里的in是TypeScript类型系统专属的映射类型(Mapped Types)语法,二者属于完全不同的使用场景,功能也完全不同。
你之前接触的[key in ResponseKeys]就是典型的映射类型写法:in关键字后接键的取值集合,TypeScript会遍历该集合的所有可能值,生成对应的对象类型规则:
- 当
in后接固定字符串联合类型(比如'devices' | 'languages')时,生成的对象类型就要求必须包含且仅包含这些固定字符串作为键 - 当
in后接基础类型string时,就表示遍历所有字符串的可能取值,生成的对象类型允许任意字符串作为键,所有键对应的值都要符合后面标注的类型要求。
你给出的示例中{ [key in string]: fabric.ITextboxOptions }的作用,就是声明texts变量是一个「键为任意字符串、值为fabric.ITextboxOptions类型」的对象,和你最早接触的标准索引签名写法{ [key: string]: fabric.ITextboxOptions }完全等价,也和TS内置工具类型写法Record<string, fabric.ITextboxOptions>作用一致。
内容的提问来源于stack exchange,提问作者Bardelman
相关产品推荐
相关产品推荐

