[英]How to define an empty object in typescript
背景
卡在 typescript 上。 我理解这个声明:
let varName:number; //null,string,..declare simple variables.
let arrName:string[] // or arrName:number[]. etc
显然这是用于对象:
//knowing type of the property
let obj: {property:string, also:number[]} = {property:'hello', also:[1,2,3]}
//now knowing the type of the property
let obj: {property:any, also:any[]} = {property: a && b || c, also:[1,'string', 'etc']}
但是当我们事先不知道属性的名称时会发生什么?
特别是,我正在尝试翻译这个 JS 位:
let myObj = {}
myObj[prop] = value
但我们事先并不知道属性的名称。
你有几个选择:
您可以使用允许任何字符串或任何数字的索引签名类型,例如:
let myObj: {[key: string]: number} = {}; myObj[prop] = value;
...允许任何字符串属性名称,其值应为数字。 (或者您可以使用{[key: number]: number}
使键为数字。 string
和number
是您仅有的两个索引签名选项。)
您可以使用Record
实用程序 type ,例如Record<string, number>
,它的作用与上述相同:
let myObj: Record<string, number> = {}; myObj[prop] = value;
您可以使用Map
代替 object:
let myObj: Map<string, number> = new Map(); myObj.set(prop, value);
在所有这三个中,作为值类型的number
只是一个示例,它可以是您想要的任何类型(包括联合类型),或者如果您不unknown
类型,或者如果您想允许any
类型,则为任何类型.
这可能很明显,但我还是要说:这确实意味着 TypeScript 无法帮助您在 object 上使用错误的属性名称。 :-) 但如果属性名称是运行时的东西,这是不可避免的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.