2016-01-22 71 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