如何在TypeScript中声明函数的返回types

我在这里检查http://go.microsoft.com/fwlink/?LinkId=267238这是TypeScript语言规范,但我看不到一件事情,我怎么可以声明函数的返回types。 我在下面的代码中展示了我期待的内容: greet(name:string) :string {}

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

我看到我们可以使用(name:string) => any但是在传递callback函数的时候主要用到:

 function vote(candidate: string, callback: (result: string) => any) { // ... } 

你是正确的 – 这里是一个完整的工作示例 – 你会看到var result隐式地是一个string,因为在greet()函数中指定了返回types。 改变types为number ,你会得到警告。

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

这里是数字的例子 – 如果你尝试这样的话,你会在操场编辑器中看到红色的波形:

 greet() : number { return "Hello, " + this.greeting; } 

您可以在3.5.3.5节和3.5.5节阅读关于函数types的更多信息。

TypeScript编译器会在可以的时候推断出types,这样做你不需要指定显式types。 所以对于迎接的例子,greet()返回一个string文字,它告诉编译器该函数的types是一个string,并且不需要指定一个types。 所以例如在这个示例中,我有迎接方法的迎宾方法返回一个string和一个variables分配给数字文字。 编译器将推断这两种types,如果您尝试将一个string分配给一个数字,您将得到一个错误。

 class Greeter { greet() { return "Hello, "; // type infered to be string } } var x = 0; // type infered to be number // now if you try to do this, you will get an error for incompatable types x = new Greeter().greet(); 

同样,这个示例会导致一个错误,因为编译器给出的信息无法决定types,这将是一个必须具有显式返回types的地方。

 function foo(){ if (true) return "string"; else return 0; } 

然而,这将工作:

 function foo() : any{ if (true) return "string"; else return 0; }