我在TypeScript中创建了一个对象数组:
userTestStatus xxxx = {
"0": { "id": 0, "name": "Available" },
"1": { "id": 1, "name": "Ready" },
"2": { "id": 2, "name": "Started" }
};
有人能告诉我如何正确地声明它的类型吗?它是可能做内联或我需要两个定义?
我希望用一个类型声明替换xxx,这样以后如果我使用userTestStatus[3]之类的东西,TypeScript就会提醒我。不小心叫了我的名字。
上面的是一个对象,不是数组。
要创建数组,请使用[&]来包围对象。
userTestStatus = [
{ "id": 0, "name": "Available" },
{ "id": 1, "name": "Ready" },
{ "id": 2, "name": "Started" }
];
除此之外,TypeScript是JavaScript的超集,所以任何有效的JavaScript都将是有效的TypeScript,因此不需要其他更改。
来自OP的反馈澄清…需要一个模型的定义张贴
你可以使用这里定义的类型来表示你的对象模型:
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" }
];
有点老了,但我觉得我可以解释清楚。
确切的答案
interface MyObject {
id: number;
name: string;
}
interface MyExactData {
[key: string]: MyObject;
}
let userTestStatus: MyExactData = {
"0": { "id": 0, "name": "Available" },
"1": { "id": 1, "name": "Ready" },
"2": { "id": 2, "name": "Started" }
};
但上面不是我们通常处理对象数组的方式,你会在javaScript中使用简单的本机数组。
interface MyObject { // define the object (singular)
id: number;
name: string;
}
let userTestStatus_better: MyObject[] = [
{ "id": 0, "name": "Available" },
{ "id": 1, "name": "Ready" },
{ "id": 2, "name": "Started" }
];
只需向我们的接口添加[],就可以输入上述对象的数组。
为了做到内联
let userTestStatus_inline: {id:number, name:string}[] = [
{ "id": 0, "name": "Available" },
{ "id": 1, "name": "Ready" },
{ "id": 2, "name": "Started" }
];
我将使用接口,因为您有一些可定义、可理解和可重用的东西。如果您需要进行更改,您可以更改一个接口,typescript将报告您的接口代码不匹配。
上面的是一个对象,不是数组。
要创建数组,请使用[&]来包围对象。
userTestStatus = [
{ "id": 0, "name": "Available" },
{ "id": 1, "name": "Ready" },
{ "id": 2, "name": "Started" }
];
除此之外,TypeScript是JavaScript的超集,所以任何有效的JavaScript都将是有效的TypeScript,因此不需要其他更改。
来自OP的反馈澄清…需要一个模型的定义张贴
你可以使用这里定义的类型来表示你的对象模型:
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" }
];
你也可以试试
interface IData{
id: number;
name:string;
}
let userTestStatus:Record<string,IData> = {
"0": { "id": 0, "name": "Available" },
"1": { "id": 1, "name": "Ready" },
"2": { "id": 2, "name": "Started" }
};
查看记录如何工作:https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkt
在我们的例子中,Record用于声明一个对象,该对象的键为字符串,值为IData类型,因此现在当我们尝试访问其属性时,它将为我们提供智能感知,并在我们尝试userTestStatus[0].nameee这样的属性时抛出类型错误