ค้นหาเว็บไซต์

angular - ข้อผิดพลาด TS2741: ไม่มีคุณสมบัติในชนิด


ในไฟล์ models/User.model.ts (ดูด้านล่าง) ผมพยายามตั้งเมธอด isEqual ดังที่แสดงในโค้ดด้านล่าง มีใครช่วยแก้ไขโค้ดของผมได้ไหม?

แฟ้ม models/User.model.ts:

export class User {
    constructor(
    public firstName: string,
    public lastName: string,
    ) {}

    isEqual (other : User): boolean {
    return other === this;
    }
}

แฟ้ม services/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: คุณสมบัติ 'isEqual' หายไปในประเภท '{ firstName: string; lastName: string;}' แต่จำเป็นในประเภท 'User'.

คำตอบ #1

ข้อผิดพลาดในไฟล์ services/user.service.ts(7,2): ข้อผิดพลาด TS2741: คุณสมบัติ 'isEqual' หายไปในประเภท '{ firstName: string; 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 ];

คำตอบ #2

มันระบุว่าพารามิเตอร์ที่คุณรับในฟังก์ชัน isEqual ควรเป็นชนิดหรือโมเดลแบบ { firstName: 'John', lastName: 'Doe' } ซึ่งนี่แสดงให้เห็นว่าคุณเพียงแค่ต้องส่งข้อมูลในรูปแบบนี้

บทความที่เกี่ยวข้อง