在文件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'
}
];
...
services / user.service.ts(7,2)中的错误:错误TS2741:类型'{firstName:string;类型中缺少属性'isEqual' lastName:string;}”,但在“ User”类型中为必填项。
答案 0 :(得分:1)
services / user.service.ts(7,2)中的错误:错误TS2741:类型'{firstName:string;类型中缺少属性'isEqual' lastName:string;}”,但在“ User”类型中为必填项。
这是因为在类定义中,您具有声明为isEqual
的函数,但是在用户列表中,您只有firstName
和lastName
,而没有关联的函数和类型的用户为Users
。
{
firstName: 'William',
lastName: 'Jones'
},
如评论中所述,您可以使用new ()
来制作一个新的User
,其中也应包含该功能。
public exampleUser = new User("William", "Jones");
然后可以依次在Users
的数组中使用
public users: Users = [ this.exampleUser ];
答案 1 :(得分:0)
指定要在函数Expire the current version of the object in 540 days
中使用的参数的类型或模型应为isEqual
,这表明您只需要以这种格式传递数据。
答案 2 :(得分:0)
由于添加了对Partial<T>
的支持,您现在可以将User的构造函数更改为以下内容,并且应该能够通过指定键和值的部分哈希值来初始化对象(如您尝试做的那样)以上)。
constructor(init?:Partial<User>) {
Object.assign(this, init);
}
摘自文档(当前位于https://www.typescriptlang.org/docs/handbook/utility-types.html#partialt):
构造一个类型,将T的所有属性设置为可选。该实用程序将返回一个表示给定类型的所有子集的类型。
答案 3 :(得分:0)
您可能不希望这种用法,但是如果不需要isEqual
用于数组中的项目,则可以使方法可选。
在方法名称中添加问号(?)
isEqual?(other: User): boolean
但是,如果您需要所有项目都使用isEqual
,那么此解决方案将不会像我一开始所说的那样对您有所帮助。通过这种用法,当您尝试使用isEqual
方法时,会出现undefined
错误。