属性是未定义的,即使它在类中定义

时间:2019-02-13 15:10:14

标签: typescript

我在从类中仅调用一个属性时遇到麻烦。 我的地图做错了吗?事实是,使用QuizWord对象映射了一个新数组,而我的映射效果很好。但是我在类中有一些属性和方法,我想稍后再调用该属性和方法,这些属性和方法应该与对象一起使用。但是他们没有。怎么来的?我以为我在映射它们时定义了新对象。

从我开始,我想使用一个简单的foreach循环并遍历对象并调用方法以将对象添加到对象中,但是我无法调用任何方法。

下面是我的一些代码。

let list: Array<QuizWord> = words.map((a) => {
    return <QuizWord>({
        name: a.name
    });
});

let letstrythisinstead: QuizWord = new QuizWord();
console.log(letstrythisinstead.test2); // this is not undefined. it works! 

list.forEach((q: QuizWord) => {
    console.log(q.name); // prints name correctly after mapping above
    console.log(q.test2) // is undefined. why? I have defined it in my class..
});

export class QuizWord {
    public test2: string = "hi";
    public name: string;
}

1 个答案:

答案 0 :(得分:2)

您的代码在这里

    return <QuizWord>({
        name: a.name
    });

不会将返回的数据转换为QuizWord。它只是告诉Typescript这是一个Quizword项目,在这种情况下,它不是真的。

基本上,QuizWord是一个类,因此要分配值,您需要对其进行构造。 您可以这样实现

export class QuizWord {
    public test2: string = "hi";

    constructor(
        public name: string,
    ){ }
}

    return new QuizWord(a.name);

代替

    return <QuizWord>({
        name: a.name
    });