gpt4 book ai didi

typescript - 别名对象的属性名称+定义它的类型

转载 作者:搜寻专家 更新时间:2023-10-30 21:44:43 24 4
gpt4 key购买 nike

我正在尝试(1) 别名返回对象的属性名称 + (2) 定义它的类型。

到目前为止,为属性名称取别名很容易,但我找不到定义它的类型的方法。

注意:我知道我可以像这样在我的函数体中转换它 (<Car>car).id , 但我想知道我是否可以在参数声明中定义它。

注意: dropModel不是我的函数,这是一个导入包的函数。


这是一个简单的 StackBlitz demo我的问题。看app.component.ts文件第 33 行,看到我的项目是 any .如何将其定义为 Vemp类(class)?


我的代码:

this.myService.dropModel('cars').subscribe(({ target: team, item: car }) => {
const targetTeamId = team.id;
const droppedCarId = car.id;
})

如您所见,我已经使用了别名 target属性为teamitemcar ,现在我可以在我的代码中使用它们并且更好地理解它。

此代码类型不安全的问题,teamcarany .


dropModel 函数声明:

dropModel: (groupName?: string) => Observable<{
target: any;
item: any;
}>;

最佳答案

您可以指定别名对象的类型,例如:

dropModel('cars').subscribe(({
target: team,
item: car
}: {
target: Team,
item: Car
}) => {
const targetTeamId = team.id;
const droppedCarId = car.id;
});

但是,声明结果类型会更方便:

interface TargetItem<TTarget, TItem> {
target: TTarget,
item: TItem
}

const dropModel: (groupName?: string) => Observable<TargetItem<any, any>> = ...

dropModel('cars').subscribe(({ target: team, item: car }: TargetItem<Team, Car>) => {
const targetTeamId = team.id;
const droppedCarId = car.id;
});

或者改用泛型函数:

const dropModel: <TTarget, TItem>(groupName?: string) => Observable<{
target: TTarget;
item: TItem;
}> = ...;

dropModel<Team, Car>('cars').subscribe(({target: team, item: car}) => {
const targetTeamId = team.id;
const droppedCarId = car.id;
})

关于typescript - 别名对象的属性名称+定义它的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57400961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com