繁体   English   中英

如何在 typescript 中定义一个空的 object

[英]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

但我们事先并不知道属性的名称。

你有几个选择:

  1. 您可以使用允许任何字符串或任何数字的索引签名类型,例如:

     let myObj: {[key: string]: number} = {}; myObj[prop] = value;

    ...允许任何字符串属性名称,其值应为数字。 (或者您可以使用{[key: number]: number}使键为数字。 stringnumber是您仅有的两个索引签名选项。)

  2. 您可以使用Record实用程序 type ,例如Record<string, number> ,它的作用与上述相同:

     let myObj: Record<string, number> = {}; myObj[prop] = value;
  3. 您可以使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM