错误TS2741:类型中缺少属性

时间:2019-06-17 07:36:54

标签: typescript methods angular7

在文件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”类型中为必填项。

4 个答案:

答案 0 :(得分:1)

  

services / user.service.ts(7,2)中的错误:错误TS2741:类型'{firstName:string;类型中缺少属性'isEqual' lastName:string;}”,但在“ User”类型中为必填项。

这是因为在类定义中,您具有声明为isEqual的函数,但是在用户列表中,您只有firstNamelastName,而没有关联的函数和类型的用户为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错误。