TypeScript 之 Record 正文 在TS 中,类似数组、字符串、数组、接口这些常见的类型都非常常见,但是如果要定义一个对象的 key 和 value 类型该怎么做呢?这时候就需要用到 TS 的 Record 了。 上代码: interfacePageInfo { title:string; } type Page="home"|"about"|"contact";constnav: Record<Page, PageInf...
Record<Keys,Type> 构造一个对象类型,其属性key是Keys,属性value是Tpye。被用于映射一个类型的属性到另一个类型 interfaceCatInfo{ age:number, breed:string } typeCatName='miffy'|'boris'|'mordred'// 字符串字面量类型 constcats:Record<CatName,CatInfo> ={ miffy: {age:10,breed:"Persian"}, boris: ...
TypeScript 之 Record 正文 在TS 中,类似数组、字符串、数组、接口这些常见的类型都非常常见,但是如果要定义一个对象的 key 和 value 类型该怎么做呢?这时候就需要用到 TS 的 Record 了。 上代码: interfacePageInfo{title:string;}typePage="home"|"about"|"contact";constnav:Record<Page,PageInfo>={about...
type Record<K extends keyof any, T> = { [P in K]: T; }; 好像源码也比较简单,即将K中的每个属性([P in K]),都转为T类型。 注意这里 {[P in K] : T} ,在JS中我们可以通过for...in遍历出一个object{}的所有 key 然后进行一些逻辑处理,那么在 TS 中是否有类似的功能用于遍历interface{},...
04.Record<Keys, Type> 作用:构造一个对象类型,其属性键为Keys,属性值为Type。 常用指数: ⭐️⭐️⭐️⭐️⭐️ 使用场景示例(创建具有一致性的字典): ts复制代码interfaceUser{name:stringage:number}typeUserName='xiaoming'|'xiaohong'|'xiaohuang'constusers:Record<UserName,User>={...
interfaceIndexedObject{[key:string]:number;// 索引签名}letindexedObj:IndexedObject={height:100,width:200,depth:150,}; 在这个例子中,IndexedObject接口使用了一个索引签名来表示对象的属性键是字符串,但属性的值可以是任何类型。 Record类型的应用场景 ...
constdynamicKeys=[`key1`,`key2`,`key3`];typeDynamicRecord=Record<typeofdynamicKeys[number],number>;constdata:DynamicRecord={key1:10,key2:20,key3:30};console.log(data); 这里,我们从一个数组dynamicKeys中提取键的集合,并生成了一个值为数字的对象类型。
record<string,boolean>与[key: string]: boolean效果相同,但前者更突出"记录"的概念。当键是字面量联合类型时,record会自动要求实现所有键: type TaskStatus = ’pending’ | ’done’ type StatusCount = Record<TaskStatus, number> //必须包含pending和done两个键 const counts: StatusCount = pending: 3,...
所以number 就可以赋值给 {}、Object 类型,但是不能赋值给 object 类型: 其实,你看源码会发现大家不会用 object 来约束,而是用 Record<string, any> 来约束索引类型,这俩其实是一样的,但是 Record<string, any> 更语义化一些。 Record<string, any> 创建了一个 key 为任意 string,value 为任意类型的索引类...
const users: {[key: string]: number} = ...; .. code-block:: typescript // 应当这样做! const users: {[userName: string]: number} = ...; 然而,相比使用上面的这种形式,在 TypeScript 中应当考虑使用 ES6 新增的 ``Map`` 与 ``Set`` 类型。因为 JavaScript 对象有一些 `令人困惑...