2017-10-06 153 views
3

是否有任何風格指南定義如何設置默認屬性值?希望官方。Typescript默認屬性值風格指南

class MyClass { 
    public foo = 'asdf'; 
} 

class MyClass { 
    public foo: string; 
    constructor() { 
     this.foo = 'asdf'; 
    } 
} 

都編譯成

var MyClass = /** @class */ (function() { 
    function MyClass() { 
     this.foo = 'asdf'; 
    } 
    return MyClass; 
}()); 

首先是清潔器和類似的C#,但第二更接近編譯的輸出的語法(和定義文件,如果創建)並且屬性類型是顯式的。

我已經看了https://www.typescriptlang.org/docs/home.htmlhttps://github.com/Microsoft/TypeScript/wiki/Coding-guidelines,並https://angular.io/guide/styleguide

回答

2

我不知道什麼是「官方」的風格指南,指定此任何地方。

自ES2015,classes are part of JavaScript。如果您的打字稿target versionES6或更高版本,那麼上述兩種編譯成

class MyClass { 
    constructor() { 
     this.foo = 'asdf'; 
    } 
} 

此外,class fields in JavaScript目前(截至2017年七月)一個Stage 3 proposal,這意味着有很好的機會,他們將最終使其進入語言。所以最終的編譯輸出可能是:

class MyClass { 
    foo = 'asdf'; 
} 

這一切都是我的話,我不會在讓你的TS碼擔心太多「更靠近」編譯的JS,因爲這種差異將最終的方式消失,在此之前,TypeScript的其中一點就是讓您今天使用未來的JavaScript特性。從TypeScript Handbook

在打字稿,我們允許開發人員現在使用這些技術,並編譯下來,JavaScript代碼在所有主要瀏覽器和平臺的作品,而不必等待對JavaScript的下一個版本。


好了,所以我的建議(不是「官」)是這樣做:

class MyClass { 
    public foo: string = 'asdf'; 
} 

你所做的屬性類型明確初始化它作爲一個類的字段。兩全其美,對吧?也許?

無論如何,希望有所幫助;祝你好運!

+0

根據你的建議,我得到了'[tslint]類型字符串,從字符串常量推斷出來,使用默認的Angular CLI'tslint.json從tslint中刪除類型註釋(不可推薦類型)',但我當然可以添加'ignore-properties' to https://palantir.github.io/tslint/rules/no-inferrable-types/,謝謝。 –