只有两个可能值的属性字符串

Was*_*des 1 typescript

我有一个Participant可以有两种类型的模型:EstablishmentProvider:

export class Participant {
    id?: number;
    name?: string;
    ltype: 'Provider' | 'Establishment';


    get isProvider(): boolean {
        return this.ltype === 'Provider';
    }

    get isEstablishment(): boolean {
        return this.ltype === 'Establishment';
    }

    get opposite(): string {
        if (this.ltype === 'Provider') {
            return 'Establishment';
        }
        return 'Provider';
    }
}
Run Code Online (Sandbox Code Playgroud)

一切都很好,没有错误,直到这里.但是当我尝试初始化它时:

const filter: Participant = {
    ltype: 'Provider'
};
Run Code Online (Sandbox Code Playgroud)

它抛出:

输入"{ltype:"Provider"; }'不能分配给'参与者'类型.

类型'{ltype:"Provider"中缺少属性'isProvider'; }".

我无法摆脱上述错误.

在此输入图像描述

我认为这不重要,但此代码适用于Angular 4应用程序.

提前致谢.

SLa*_*aks 5

你误解了TypeScript类.

您的对象只有一个ltype属性; TypeScript不会神奇地在您的类中插入其余属性.

相反,您应该添加一个构造函数,该构造函数接受这两个字符串之一并进行初始化ltype.

您可以public在构造函数列表中使用TypeScript 来声明属性及其参数,并自动从参数初始化属性:

class Participant {
    id?: number;
    name?: string;

    constructor(public ltype: 'Provider' | 'Establishment') {
    }

    get isProvider(): boolean {
        return this.ltype === 'Provider';
    }

    get isEstablishment(): boolean {
        return this.ltype === 'Establishment';
    }

    get opposite(): string {
        if (this.ltype === 'Provider') {
            return 'Establishment';
        }
        return 'Provider';
    }
}

const filter = new Participant('Provider');
console.log(filter.ltype); // 'Provider'
Run Code Online (Sandbox Code Playgroud)

实例