2016-01-22 65 views
4

我在關注Typescript handbook以瞭解有關班級的內容。速記在打字稿中聲明「返回類型」

下面是一個例子:

class Greeter { 
    greeting: string; 
    constructor(message: string) { 
     this.greeting = message; 
    } 
    greet() { 
     return "Hello, " + this.greeting; 
    } 
} 

var greeter: Greeter; // return type: Greeter 
greeter = new Greeter("world"); // implement greeter variable 
alert(greeter.greet()); 

在打字稿:

var greeter; // return type: any 
var greeter: Greeter; // return type: Greeter (implicit convertion `any` to `Greeter`) 

所以,我的問題是:如果我們確切知道的返回類型,我們爲什麼不能用Greeter而不是var關鍵字?

我想什麼檔案:

Greeter greeter = new Greeter("world"); // same to: var greeter = new Greeter("world"); 

回答

5

這樣做是爲了與javascript保持一致。 類型定義可以省略,TypeScript將自動推斷變量的類型。

var greeter : Greeter = new Greeter(); 

相同

var greeter = new Greeter(); 

這稍微跑題了,但你也可以聲明可以容納多種類型的變量。 例如

var a : Greeter | number 

將持有一個控制器或一個數字。在我看來,在變量名後面有類型定義更加優雅。

+0

我認爲打字稿可以在翻譯成javascript代碼之前做到。我正在談論'打字稿語法'。你同意嗎? –

+0

不,保持js方式仍然更加一致。另外請記住,您可以使用let或const來聲明不同類型的變量。 – toskv

2

這比簡單。你實際上可以做

var greeter = new Greeter("world"); 

編譯器足夠聰明以從那裏推斷出類型。

編輯:對不起。我誤解了這個問題,好像你不知道這個語法。提到的其他答案大多是你想要的。那就是:

var greeter: Greeter = new Greeter("world"); 

你不能在這裏的方式,因爲我們是在談論不同的語言去了Java。你不應該花太長的時間去適應它。這是一件非常小的事情。

2

你想要完成的是不可能的,因爲它不是TypeScript語法。

如果要指定它這樣做了變量的類型:

var greeter: Greeter = new Greeter("world"); 

有很多相似之處,Java和C#,但在打字稿類型系統不同的是特別是在語法。

+0

雅,你完全理解我的。但爲什麼不呢?我的意思是:打字稿可以做些什麼(自動將'Greeter greeter = new Greeter()'轉換爲'var greeter = new Greeter()')。打字稿編譯器可以做到這一點 –

+0

如果你想建議新的語言功能,我建議你提交一個問題在github上的打字稿回購... https://github.com/microsoft/typescript/issues – Brocco