我有一个Participant可以有两种类型的模型:Establishment或Provider:
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应用程序.
提前致谢.
你误解了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)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           314 次  |  
        
|   最近记录:  |