TS对象上无法访问的方法

时间:2019-06-28 10:56:55

标签: javascript typescript vue.js

我正在尝试使用Vue组件内部存储在Typescript类上的方法。

当尝试使用另一个类(恰好是Typescript Vue组件)在所述类上定义的方法时,Uncaught TypeError返回到控制台,提示我尝试使用的方法不是功能

请考虑以下Paper类:

export class Paper {
    paperSize: number;
    documentTitle: string;

    constructor() {
        paperSize = 1;
        documentTitle = "Arbitrary title";
    }

    getDocumentRatio(): number {
        return ArbitraryLibrary.arbitraryNumericFunction(this.paperSize);
    }
}

在另一个类中尝试使用此类(Vue组件)时:

@Component()
export class PaperUser {
    paper = new Paper();
    paperUserMethod() {
        ...
        const unimportant = this.paper.getDocumentRatio();
        ...
    }
    ...
    // Wherever the method gets used
        this.paperUserMethod();
    ...
}

该方法的执行随后被中断,因为以这种方式使用该函数会产生TypeError

最初认为这可能是一个有约束力的问题,我尝试了更多类似的方法

...
this.paper.getDocumentRatio().bind(this.paper);
...

但是显然这是行不通的,因为以这种方式进行绑定与方法链接一样有效-IDE(VSCode)断言属性'bind'在'number'类型上不存在。

1 个答案:

答案 0 :(得分:0)

一方面,您必须使用this.myAttribut在构造函数中设置属性,另一方面,您要使用类的方法实现中的方法,您可以尝试以下方法:

class Paper {
    paperSize: number;
    documentTitle: string;
    constructor() {
        this.paperSize = 1;
        this.documentTitle = "Arbitrary title";
    }
    getDocumentRatio(): number {
        // try to be trivial on first attempt
        return this.paperSize;
    }
}

class PaperUser {
    paper = new Paper();
    paperUserMethod() {
        return this.paper.getDocumentRatio();
    }
    usePaperuser(){
        this.paperUserMethod();
    }
}