类型'y'中缺少属性'x'

时间:2016-07-19 10:03:20

标签: typescript interface

此代码在TypeScript 1.8之前编译,现在不再存在。

//[in app3.ts]
declare module App {

    export interface Iaa {
        nb: number;
    }

    export interface Ibb extends Iaa {
        title: string;
    }

}

//[in app4.ts:]
/// <reference path="app3.ts"/>

module App {
"use strict";

export interface Iaa extends aa {
}

export class aa {

    constructor() {
    }

    test(): void {
        var that: Iaa = <Iaa>this; //Error
    }
}

export interface Ibb extends bb{
}

export class bb extends aa {

    constructor() {
        super();
    }

    test(): void {
        var that: Ibb = <Ibb>this;//Error
        that.nb = 10;
    }

}
}

这是错误: app4.ts(15,29):错误TS2352:类型'this'和类型'Iaa'都不能分配给另一个。   类型'aa'不能分配给'Iaa'类型。     'aa'类型中缺少属性'nb'。

有人可以解释一下为什么'nb'和'title'在app3.ts中时未定义? 谢谢

1 个答案:

答案 0 :(得分:0)

回答你的问题:

  

有人可以解释一下为什么'nb'和'title'在app3.ts中时未定义?

可能是因为您尝试放入Iaa aa的一个实例,它与Iaa没有任何共同之处(没有属性匹配)。能够做到这一点aa需要实施Iaa或至少拥有相同的属性。 案例Ibb

也是如此

如何让你的代码再次运作。

declare module App {

    export interface Iaa {
        nb: number;
    }

    export interface Ibb extends Iaa {
        title: string;
    }

}

module App {
    "use strict";

    export interface Iaa extends aa {
    }

    export class aa {

        constructor() {
        }

        test(): void {
            var that: Iaa = <Iaa>this; //Error
        }

        nb: number; // <-- add that
    }

    export interface Ibb extends bb {
    }

    export class bb extends aa {

        constructor() {
            super();
        }

        test(): void {
            var that: Ibb = this as Ibb;//Error
            that.nb = 10;
        }

        title: string; // <-- add that
    }