簡體   English   中英

TypeScript類:構造函數和方法

[英]TypeScript classes : constructor and method

我試圖避免在Typescript類中進行雙重聲明。

在我寫這樣的課程之前:

module ModuleName {
    export class ClassName {
        public method: () => void;

        constructor(
            private dependency: any ) {
            this.method = () => {
                dependency.someUse();
            };
        }
    }
}

但是方法類型的聲明(這里是public method: () => void; )看起來沒有用,尤其是當您已經有一個聲明它的接口時。 所以我想寫:

module ModuleName {
    export class ClassName {
        constructor(
            private dependency: any ) { }

        public method = () => {
            this.dependency.someUse();
        };

    }
}

注意:為了避免variable XXX used before declaration警告variable XXX used before declaration ,我們必須將方法放在構造函數之后。

但是現在,如果我們在構造函數中使用方法,我們將再次收到有關此方法的警告:

module ModuleName {
    export class ClassName {
        constructor(
            private dependency: any ) {
            this.method(); // warning here
        }

        public method = () => {
            this.dependency.someUse();
        };

    }
}

因此,我的問題是: 我們應該如何正確編寫類?

注意:當打字稿編譯器更正聲明的順序時,這沒什么大不了的,我只是想知道是否有可能在沒有雙重聲明和警告的情況下編寫類。

這聽起來像是TSLint的錯誤。 您是否正在使用WebEssentials進行任何更改?

您可能要禁用此規則,因為它說的似乎是錯誤的。 WebEssentials從用戶主目錄( %userprofile% )加載tslint.json 您應該能夠在其中找到tslint.json文件。 在這里可以啟用/禁用規則。

聽起來以下規則中有錯誤

no-use-before-declare禁止使用不允許在聲明變量之前使用變量

您可以通過添加(或更改)配置來禁用此規則:

"no-use-before-declare": false

關於tslint及其規則的更多信息可以在這里找到: https : //github.com/palantir/tslint/

最后,我認為刪除此警告不是一個好主意,因為在某些情況下它可能非常有用。

但是我找到了解決問題的方法:如果將構造函數移到類的末尾,則不再有警告:

module ModuleName {
    export class ClassName {

        public method = () => {
            this.dependency.someUse();
        };

        constructor(
            private dependency: any ) {
            this.method();
        }

    }
}

如果我們看一下生成的JS,它更容易理解發生了什么:構造函數的參數仍然放在生成的函數的開頭:

var ModuleName;
(function (ModuleName) {
    var ClassName = (function () {
        function ClassName(dependency) {
            var _this = this;
            this.dependency = dependency;
            this.method = function () {
                _this.dependency.someUse();
            };
            this.method();
        }
        return ClassName;
    })();
    ModuleName.ClassName = ClassName;
})(ModuleName || (ModuleName = {}));

引起您variable XXX used before declaration錯誤variable XXX used before declaration因為將您的類方法聲明為類屬性。

而不是像這樣聲明您的方法:

public method = () => {

像這樣聲明:

public method() {

因此您的課程如下所示:

module ModuleName {
    export class ClassName {
        constructor(private dependency: any ) { }

        public method() {
            this.dependency.someUse();
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM