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

时间:2018-09-04 15:32:36

标签: 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';
    }
}

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

const filter: Participant = {
    ltype: 'Provider'
};

它抛出:

  

Type'{ltype:“ Provider”; }”不能分配给“参与者”类型。

     

类型'{ltype:“ Provider”;中缺少属性'isProvider'; }'。

我无法摆脱以上错误。

enter image description here

我认为这无关紧要,但是此代码适用于Angular 4应用程序。

谢谢。

1 个答案:

答案 0 :(得分:5)

您误解了TypeScript类。

您的对象仅具有» MyProject [.NETCoreApp,Version=v2.1] System.Private.ServiceModel [T] 4.4.0 -> 4.5.3 System.ServiceModel.Primitives [T] 4.4.0 -> 4.5.3 属性; TypeScript不会神奇地在您的类中插入其余属性。

相反,您应该添加一个采用这两个字符串之一并初始化ltype的构造函数。

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

public

Live Example