簡體   English   中英

使 Typescript strictNullChecks 與未定義的返回 vanilla js 函數一起使用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM