[英]Typescript type definition of a mapped Object already define
我正在使用 Typescript 开展一个项目。 代码工作正常。 我只是想知道对于已经过滤和定义的映射 Object 的类型定义的最佳实践是什么。 例如,如果我有以下代码:
const person: Person = {
name: 'Joe',
surname: 'Doe',
age: 30,
address: [{
mainAddress: {
street: "Queen st",
number: 9,
building: 'main',
unit: 5,
},
secundaryAddress: {
street: "King st",
number: 7,
house: 'The house'
}
}]
}
interface Person {
name: string
surname: string
age: number
address: [{
mainAddress: {
street: string
number:number
building: string
unit: number
}},
{
secundaryAddress: {
street: string
number: number
house: string
}
}]
}
const filterPerson = person.address.filter((ad: any) => ad.mainAddress ? true : false)
const mappedAddress = filterPerson.map((m: any) => m.)
在我对主Object
进行过滤之后。 我需要 map 结果。 在这种情况下, filterPerson.map
可以很好地与any
作为类型定义一起使用,但是是否有最好的方法来定义过滤器中的ad
和 map 中的m
或者在这种情况下我应该为两者编写一个新接口。
如果我删除过滤器上的any
内容并在示例的 mainAddress 上删除 hover,则会弹出错误 [![enter image description here][1]][1]
如您所见,我的代码中的 Object 不同,但此处示例的语法相同。 [1]: https://i.stack.imgur.com/hfaro.png
你给我们下面的 object address
为 object
const person: Person = {
name: 'Joe',
surname: 'Doe',
age: 30,
address: {
mainAdress: {
street: "Queen st",
number: 9,
building: 'main',
unit: 5,
},
secundaryAdress: {
street: "King st",
number: 7,
house: 'The house'
}
}
}
但是然后给我们这个接口,它的address
是一个对象数组。
interface Person {
name: string
surname: string
age: number
address: [{
mainAdress: {
street: string
number:number
building: string
unit: number
}},
{
secundaryAdress: {
street: string
number: number
house: string
}
}]
}
然后你给我们一个不完整的过滤方法:
const mappedAddress = filterPerson.map((m: any) => m.)
请修正你的例子
编辑:假设address
实际上定义如下,我将创建 4 个接口,一个用于主要Person
,一个用于Address
,一个用于每种Adress
address: [{
mainAdress: {
street: "Queen st",
number: 9,
building: 'main',
unit: 5,
},
secondaryAdress: {
street: "King st",
number: 7,
house: 'The house'
}
}]
interface MainAdress {
street: string;
number: number;
building: string;
unit: number;
}
interface SecondaryAdress {
street: string;
number: number;
house: string;
}
interface Address {
mainAdress?: MainAdress;
secondaryAdress?: SecondaryAdress;
}
interface Person {
name: string
surname: string
age: number
address: Address[];
}
然后您的filterPerson
const 可以键入如下:
const filterPerson: Address[] = person.address.filter((ad: (Address)) => ad.mainAdress ? true : false)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.