如何定义打字稿中的对象的编号对象?

我创build了这个对象的“数组”。 有人能告诉我如何在打字稿中定义这些吗? 是否可以内联或者我需要两个定义?

userTestStatus xxxx = { "0": { "id": 0, "name": "Available" }, "1": { "id": 1, "name": "Ready" }, "2": { "id": 2, "name": "Started" } }; 

我打算用一个定义来replace“xxx”(我认为这是正确的词)。 所以后来Typescript会警告我,如果我错误地使用了像userTestStatus [3] .nammme之类的东西。

你最好使用一个本地数组,而不是一个具有类似数字的属性的对象字面值,这样编号(以及许多其他的数组函数)将被用于现成的处理。

你在这里寻找的是你的数组的内联接口定义,它定义了该数组中的每个元素,无论是最初存在还是稍后引入:

 let userTestStatus: { id: number, name: string }[] = [ { "id": 0, "name": "Available" }, { "id": 1, "name": "Ready" }, { "id": 2, "name": "Started" } ]; userTestStatus[34978].nammme; // Error: Property 'nammme' does not exist on type [...] 

如果您正在使用值初始化您的数组,则显式types定义不是必需的; TypeScript可以从初始分配中自动推断大多数元素types:

 let userTestStatus = [ { "id": 0, "name": "Available" }, ... ]; userTestStatus[34978].nammme; // Error: Property 'nammme' does not exist on type [...] 

你在上面是一个对象,而不是一个数组。

要制作一个数组,请使用[]围绕您的对象。

 userTestStatus = [ { "id": 0, "name": "Available" }, { "id": 1, "name": "Ready" }, { "id": 2, "name": "Started" } ]; 

除此之外,TypeScript是JavaScript的超集,所以任何有效的JavaScript都将是有效的TypeScript,因此不需要其他更改。

来自OP的反馈澄清…需要对所发布模型的定义

你可以使用这里定义的types来表示你的对象模型:

 type MyType = { id: number; name: string; } type MyGroupType = { [key:string]: MyType; } var obj: MyGroupType = { "0": { "id": 0, "name": "Available" }, "1": { "id": 1, "name": "Ready" }, "2": { "id": 2, "name": "Started" } }; // or if you make it an array var arr: MyType[] = [ { "id": 0, "name": "Available" }, { "id": 1, "name": "Ready" }, { "id": 2, "name": "Started" } ]; 

你真正想要的可能只是一个枚举

如果你正在寻找类似于枚举的东西(因为我看到你正在定义一个对象并附加一个连续的ID 0,1,2,并且包含一个你不想拼错的名称字段(例如name和naaame) ,最好定义一个枚举,因为顺序标识是自动处理的,并为您提供了开箱即用的typesvalidation。

 enum TestStatus { Available, // 0 Ready, // 1 Started, // 2 } class Test { status: TestStatus } var test = new Test(); test.status = TestStatus.Available; // type and spelling is checked for you, // and the sequence ID is automatic 

上面的值将自动映射,例如“可用”为“0”,您可以使用TestStatus.Available访问它们。 而Typescript将强制执行这个types。

如果您坚持将新types定义为您的自定义types的数组

你需要一个对象数组 (不完全是一个对象的键“0”,“1”和“2”),所以我们先定义对象的types,然后定义一个包含数组的types。

 class TestStatus { id: number name: string constructor(id, name){ this.id = id; this.name = name; } } type Statuses = Array<TestStatus>; var statuses: Statuses = [ new TestStatus(0, "Available"), new TestStatus(1, "Ready"), new TestStatus(2, "Started") ] 

一些tslint规则禁止使用[],示例消息: Array type using 'T[]' is forbidden for non-simple types. Use 'Array<T>' instead. Array type using 'T[]' is forbidden for non-simple types. Use 'Array<T>' instead.

那么你会写:

 var userTestStatus: Array<{ id: number, name: string }> = Array( { "id": 0, "name": "Available" }, { "id": 1, "name": "Ready" }, { "id": 2, "name": "Started" } );