2 回答

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超3個(gè)贊
當(dāng)你這樣做時(shí)
foo(type: any)
這只是一個(gè)簡(jiǎn)單的函數(shù)定義。如果可以的話,TS 將推斷返回值的類型。
foo(type: any): boolean
是一個(gè)函數(shù)定義,添加了返回值foo應(yīng)該是布爾值的斷言。(如果 TS 推斷返回值不是布爾值,則會(huì)拋出錯(cuò)誤。通常,這是沒(méi)有必要的。)
foo(type: any): type is number
和上面兩個(gè)完全不同。它允許調(diào)用者縮小傳遞foo表達(dá)式的類型。這稱為類型保護(hù)。例如,對(duì)于最后一個(gè)實(shí)現(xiàn),您可以執(zhí)行以下操作:
const something = await apiCall();
// something is unknown
if (foo(something)) {
// TS can now infer that `something` is a number
// so you can call number methods on it
console.log(something.toFixed(2));
} else {
// TS has inferred that `something` is not a number
}
您只能使用某種: type is number語(yǔ)法來(lái)執(zhí)行上述操作 - 其他兩個(gè)定義foo不允許調(diào)用者縮小范圍。

TA貢獻(xiàn)1982條經(jīng)驗(yàn) 獲得超2個(gè)贊
這意味著您的函數(shù)需要布爾值作為參數(shù):
function foo(arg: boolean){
if(typeof arg != 'boolean'){
Throw 'type error'
} else {
return arg
}
}
這意味著您的函數(shù)將返回一個(gè)布爾值:
function foo(): boolean {
return true;
}
let value: string;
value = foo();
//Type Error, variable value (type 'string') not assignable to type 'boolean'
添加回答
舉報(bào)