![](/img/trans.png)
[英]typescript with strictNullChecks returning undefined on handbook getArea Function
[英]Getting Typescript strictNullChecks to work with undefined returning vanilla js functions
使用慣用的 js 在錯誤時返回未定義,轉換為 TS
function multiply(foo: number | undefined){
if (typeof foo !== "number"){
return;
};
return 5 * foo;
}
當在新的 TS 代碼中使用乘法時,我得到編譯器認為 doStuff 可以返回 undefined 的問題,但它不能。
因此,我嘗試編寫由安全 TS 代碼調用的此函數的“不安全”版本,將安全版本留給常規 js 代碼。
function unsafeMultiply(num: number){
return multiply(num);
}
由於 unsafeMultiply 只能接受一個數字,因此乘法中的類型保護應該考慮到乘法只會返回一個數字,因為 unsafeMultiply 只能處理數字。 如果這對編譯器來說太復雜了,我如何強迫他接受我知道我在做什么?
當在新的 TS 代碼中使用乘法時,我得到編譯器認為 doStuff 可以返回 undefined 的問題,但它不能。
是的,它可以: multiply(undefined)
返回undefined
。
如果這對編譯器來說太復雜了,我如何強迫他接受我知道我在做什么?
你可以做一個類型斷言,因為你知道如果用非數字調用multiply
只會返回undefined
:
function unsafeMultiply(num: number) {
return multiply(num) as number;
}
或者您可以在運行時為類型保護添加代碼:
function unsafeMultiply(num: number) {
let result = multiply(num);
if (typeof result === "undefined") {
throw new Error("Invalid num argument");
}
return result;
}
但是,如果是我,我會做multiply
函數失敗或返回NaN
,而不是返回undefined
,如果給undefined
。 那么就不需要unsafeMultiply
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.