如何定义对象属性值的类型

时间:2020-11-04 04:28:19

标签: typescript

在TypeScript中,我可以如下声明一个类型化数组:

interface Something {
  a: number,
  b: number
}

const arr: Array<Something> = [{a:1, b:2}, {a:3, b:4}]

但是我将如何声明等效对象的类型:

const obj = {
  propA: {a:1, b:2},
  propB: {a:3, b:4}
}

在这里,我不在乎propA,propB等的名称,并且我不需要定义顶级属性名称的接口,但是我想强制每个属性值都是Something类型的。这可能吗?预先感谢。

2 个答案:

答案 0 :(得分:3)

您可以使用{ [key: string]: Something }

const obj: { [key: string]: Something } = {
  propA: {a:1, b:2},
  propB: {a:3, b:4}
}

playground

答案 1 :(得分:2)

@Psidom已正确回答。归功于他。我只是在回答,因为上面定义的代码可以通过定义自定义对象的另一个接口进行模块化。

interface myJsonObject{
 [key: string] : Something
}

const obj: myJsonObject = {
 propsA : {a: 1, b:2},
 propsB : {a: 3, b:4}
}

当您要在另一个打字稿文件中使用相同的myJsonObject时,这可能会对您有所帮助。您可以在*.d.ts中添加此接口,然后将其导出并导入任何打字稿文件中。

//my.d.ts
interface Something {
  a: number,
  b: number
}
export interface myJsonObject {
  [key: string] : Something
}

//any_typescript_file.ts
import { myJsonObject } from "./my.d.ts"

const obj: myJsonObject = {
 propsA : {a: 1, b:2},
 propsB : {a: 3, b:4}
}