打字稿:强类型传入数组变量类型
Typescript: Strongly type incoming array with variable types
我有一个 JSON 数组,它可以包含由 IPerson
和 ICompany
定义的两种类型之一。
[
{ "Name" : "Bob", "Age" : 50, "Address": "New Jersey"},
{ "Name" : "ABC Inc", "Founded" : 1970, "CEO": "Alice" }
]
此数据是从端点接收的。我想在我的 Typescript 客户端应用程序中以完全相同的方式映射这些数据。在这种情况下我应该如何定义我的模型。
我知道我们可以在 TypeScript 中定义相同的接口,但是是否可以有一个数组来保存由 IPerson
和 ICompany
定义的两个对象中的任何一个,并在迭代时知道每个项目的类型数组?
你可以有一个Array<IPerson | ICompany>
。对于迭代,你可以做这样的事情
function iterateMyArray(array: Array<IPerson | ICompany>) {
array.forEach(item => {
if ('Age' in item) {
// item is an person
console.log(item.Address);
} else {
// item is a company
}
})
}
我有一个 JSON 数组,它可以包含由 IPerson
和 ICompany
定义的两种类型之一。
[
{ "Name" : "Bob", "Age" : 50, "Address": "New Jersey"},
{ "Name" : "ABC Inc", "Founded" : 1970, "CEO": "Alice" }
]
此数据是从端点接收的。我想在我的 Typescript 客户端应用程序中以完全相同的方式映射这些数据。在这种情况下我应该如何定义我的模型。
我知道我们可以在 TypeScript 中定义相同的接口,但是是否可以有一个数组来保存由 IPerson
和 ICompany
定义的两个对象中的任何一个,并在迭代时知道每个项目的类型数组?
你可以有一个Array<IPerson | ICompany>
。对于迭代,你可以做这样的事情
function iterateMyArray(array: Array<IPerson | ICompany>) {
array.forEach(item => {
if ('Age' in item) {
// item is an person
console.log(item.Address);
} else {
// item is a company
}
})
}