168

TypeScript言語仕様であるhttps://github.com/Microsoft/TypeScript/blob/master/doc/spec.mdを確認しましたが、関数の戻り型を宣言する方法が見つかりませんでした。

私は以下のコードで私が期待していたことを示しました: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()は文字列リテラルを返します。これは、関数の型が文字列であり、型を指定する必要がないことをコンパイラに通知します。したがって、たとえばこのサンプルでは、​​文字列を返すgreetメソッドとnumberリテラルに割り当てられた変数を持つgreeterクラスがあります。コンパイラは両方のタイプを推測し、文字列を数値に割り当てようとするとエラーが発生します。

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

複数の関数で使用する外部リターン型宣言:

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 に答える