【发布时间】:2019-10-30 18:40:28
【问题描述】:
在文件 models/User.model.ts(见下文)中,我尝试设置方法 isEqual,如下面的代码所示。 有人可以更正我的代码吗?
文件模型/User.model.ts:
export class User {
constructor(
public firstName: string,
public lastName: string,
) {}
isEqual (other : User): boolean {
return other === this;
}
}
文件服务/user.service.ts:
import { User } from '../models/User.model';
import { Subject } from 'rxjs/Subject';
export class UserService {
private users: User[] = [
{
firstName: 'William',
lastName: 'Jones'
},
{
firstName: 'John',
lastName: 'Doe'
}
];
...
服务/user.service.ts(7,2) 中的错误:错误 TS2741:类型“{ firstName: string;”中缺少属性“isEqual” lastName: string;}' 但在“用户”类型中是必需的。
【问题讨论】:
-
你不能只说
{ firstName: 'John', lastName: 'Doe' }是User,因为它不是。你需要new User('john', 'doe');。 -
@ErikPhilips 这很不幸,也是我对 TypeScript 的不满之一。其他语言处理该语法没有问题
-
@nuzzolilo 还有哪些其他语言支持在不指定/调用构造函数的情况下创建对象?
-
@ErikPhilips 撇开是否调用默认构造函数的语义(这不是问题):JS、C#、F#、Java、C99、C++20(通过指定的初始化程序)、Python 以及现在通过 Partial
的 TS 只是我能想到的一些。如果可以选择更改构造函数,我添加了一个答案,显示如何使用 TS 执行此操作。 -
@nuzzolilo 我希望对默认构造函数有所不同。 new operator 在功能上做了很多不调用 new 是不可能的事情。与您帖子中的大多数(如果不是所有)相关语言一样,new 是构造用户定义类的必需。虽然可能有一些方法可以避免调用构造函数(如 c#),但它很少使用,除了一些主要的例外。
标签: angular typescript methods angular7