gpt4 book ai didi

angular - Typescript - 为类成员设置默认值

转载 作者:太空狗 更新时间:2023-10-29 17:42:26 26 4
gpt4 key购买 nike

我有一个简单的模型:

export class Profile extends ServerData {
name: string;
email: string;
age: number;
}

当我调用服务器(Angular 4,$http)时,我经常得到以下响应:

{
name: string;
email: string;
}

缺少 age 属性。

有什么方法可以使用我的模型并创建一个默认年龄以防它丢失吗?如果可能,我宁愿不必创建 2 个单独的模型。

我不想将年龄创建为可选属性 - 我需要它,即使它的默认值不正确也是如此。

更新:

这是我对服务器的调用:

results-manager.component.ts:

this.resultsManagerService.getResults(this.config.request.action, this.pagingAndSorting, this.args).subscribe(
results => {
this.results = this.results.concat(results as Profile[]);

results-manager.service.ts:

getResults(action: string, pagingAndSorting: PagingAndSorting, args: string[]): Observable<Profile[]> {
return this.apiService.callServer(
pagingAndSorting,
action,
...args );

请求有效并且我收到了响应,但即使我定义了默认值(如@msanford 的回答所建议的那样),当我在组件中收到响应时它们也会被删除。同样,如果我向模型添加构造函数(根据 Mike Tung 的回答)。

后端响应似乎完全覆盖了模型——而不仅仅是分配值。

我怎样才能让它只将值分配给模型而不删除它不返回的值?

最佳答案

是的,很容易,而且您不需要添加类构造函数。

export class Profile extends ServerData {
name: string;
email: string;
age: number = 0;
}

定义默认值的能力是区分 class 的主要因素之一。来自 interface .

为此工作您需要在代码中的某处调用new Profile(),否则将不会创建类实例并且您将没有默认值设置,因为上面的 TypeScript 将编译为以下 JavaScript:

var Profile = /** @class */ (function () {
function Profile() {
this.age = 0;
}
return Profile;
}());

因此仅将它用于类型在编译时断言 不足以在运行时设置默认值。

TypeScript Playground 中查看实际效果.

关于angular - Typescript - 为类成员设置默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49434944/

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