168

我在这里检查了https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md这是TypeScript 语言规范,但我找不到如何声明函数的返回类型。

我在下面的代码中展示了我的期望:greet(name:string): string {}

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

我知道我可以使用(name:string) => any,但这主要在传递回调函数时使用:

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

5 回答 5

135

你是对的 - 这是一个完整的工作示例 - 你会看到它var result隐含地是一个字符串,因为返回类型是在greet()函数上指定的。将类型更改为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;
}
于 2012-10-04T21:32:08.667 回答
38

使用箭头符号的返回类型与以前的答案相同:

const sum = (a: number, b: number) : number => a + b;
于 2018-11-04T20:45:50.610 回答
32
functionName() : ReturnType { ... }
于 2018-01-01T16:43:35.027 回答
20

您可以在 3.5.3.5 和 3.5.5 部分中阅读有关语言规范中函数类型的更多信息。

TypeScript 编译器会在可能的情况下推断类型,这样做你不需要指定显式类型。所以对于 greeter 的例子,greet() 返回一个字符串字面量,它告诉编译器函数的类型是一个字符串,不需要指定类型。因此,例如在这个示例中,我有一个 greeter 类,它带有一个返回字符串的 greet 方法和一个分配给数字文字的变量。编译器将推断这两种类型,如果您尝试将字符串分配给数字,则会出现错误。

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(); 

同样,此示例将导致错误,因为根据信息,编译器无法确定类型,这将是您必须具有显式返回类型的地方。

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

但是,这将起作用:

function foo() : any{
    if (true)
        return "string"; 
    else 
        return 0;
}
于 2012-10-04T22:43:18.653 回答
5

External return type declaration to use with multiple functions:

type ValidationReturnType = string | boolean;

function isEqual(number1: number, number2: number): ValidationReturnType {
    return number1 == number2 ? true : 'Numbers are not equal.';
}

于 2021-02-03T14:40:28.970 回答