如何将接口强制转换为具体类型

时间:2017-01-13 15:10:46

标签: typescript

我有以下内容:

export interface SimpleChanges {
    [propName: string]: SimpleChange;
}

export class PrivateComponent implements OnChanges {
    @Input() private text: string;

    ngOnChanges(changes: SimpleChanges): void {
        console.log(changes.text.currentValue);
    }
}

编译器给了我一个警告:

console.log(changes.text.currentValue);
                    ^^^^
Error:(13, 29) TS2339:Property 'text' does not exist on type 'SimpleChanges'.

如何判断对象是否具有此属性以及其他一些属性?我试过这样:

ngOnChanges(changes: SimpleChanges as {text?:string, other?:string}): void {

但语法已关闭。

此外,正如@JBNizet建议的那样,以下工作:

console.log(changes['text'].currentValue);

为什么?

1 个答案:

答案 0 :(得分:1)

如果使用error : fanion « 0 » used with « %p » gnu_printf format ,TypeScript编译器将发出错误,因为SimpleChanges类中没有名为changes.text的正式属性。这样做是因为TypeScript的重点是为JavaScript带来类型安全性,并发现JavaScript无法找到的代码中的潜在错误。

要访问text属性,您需要使用text,这样可以清楚地了解您所知道的TypeScript,并接受该属性是动态属性,而不是在SimpleChange中正式定义。