Typescript类失败

时间:2016-05-29 10:59:11

标签: typescript

我无法转换以下课程:

class DataService {
    styles: Object[];
    selectedStyle: Object;
    selectedChildStyle: Object;

    constructor() {
        this.styles = [{
            "name": "Parent",
            "child": {}
        }];

        this.selectedStyle = this.styles[0];

        // THE BELOW LINES CREATE PROBLEM
        if (this.selectedStyle.child && this.selectedStyle.child.length)
            this.selectedChildStyle = this.selectedStyle.child[0];
        else
            this.selectedChildStyle = null;
    }
}

这不让我npm启动应用程序。如果我将最后四行取消注释,它会给代码ELIFECYCLE带来一个奇怪的错误。

请帮忙!

2 个答案:

答案 0 :(得分:2)

这是因为您使用Object作为this.selectedStyle的类型,而Object没有名为child的字段。

如果您希望编译器了解类型,那么您需要定义它们,例如:

interface Style {
    name: string;
    child: Style[];
}

class DataService {
    styles: Style[];
    selectedStyle: Style;
    selectedChildStyle: Style;

    constructor() {
        this.styles = [{
            "name": "Parent",
            "child": [<Style> {}]
        }];

        this.selectedStyle = this.styles[0];

        // THE BELOW LINES CREATE PROBLEM
        if (this.selectedStyle.child && this.selectedStyle.child.length)
            this.selectedChildStyle = this.selectedStyle.child[0];
        else
            this.selectedChildStyle = null;
    }
}

答案 1 :(得分:1)

selectedStyle定义为任何;

selectedStyle: any; // This is the change

class DataService {
    styles: Object[];
    selectedStyle: any; // This is the change
    selectedChildStyle: Object;

    constructor() {
        this.styles = [{
            "name": "Parent",
            "child": {}
        }];

        this.selectedStyle = this.styles[0];

        if (this.selectedStyle.child && this.selectedStyle.child.length)
            this.selectedChildStyle = this.selectedStyle.child[0];
        else
            this.selectedChildStyle = null;
    }
}