如何定义打字稿中的对象的编号对象?
我创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" } );