javascript - 如何在 TypeScript 中宣告函式的回傳類型
我查看了這裡 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) {
// ...
}
答案#1
你是對的 - 這裡有一個完整可運行的範例 - 你會看到 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;
}
答案#2
使用箭頭符號的返回類型與之前的答案相同:
const sum = (a: number, b: number) : number => a + b;
答案#3
functionName() : ReturnType { ... }
答案#4
你可以在語言規範的第 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;
}
