[英]Property 'split' does not exist on type 'never'
我有一個可以更新result
變量的函數。 如果result
最終不是字符串,我會立即停止該函數。 否則,我將 split() 方法應用於字符串result
。
該功能永遠不會崩潰。 但是,打字稿聲稱:
“'never' 類型不存在屬性 'split'。
這是代碼片段:
function foo(){ let result = users[category] as { [key: string]: {} }; ["employees", "tech"].forEach((k) => { if (!result[k]) return; return (result = result[k]); }); if (typeof result !== "string") return null; // do more stuff return result .split("__") .map((word:string) => word.toUpperCase()) .join("") : result; }
如何解決這種類型的問題?
您正在為result
變量顯式分配一個null
值:
let result = null;
條件:
if (typeof result !== "string")
將始終評估為真。 return result...
代碼將永遠不會執行。
如果您稍微修改您的函數以接受result
作為參數,您的條件將按您的預期工作,並且 TS 不會抱怨。
function foo(result: string | null) { // result arg can be possibly null
// do stuff
}
在您的代碼示例中,結果的類型為null
且僅為 null
如果您希望使其接受 null 或字符串,則需要明確聲明
function foo(){
let result: string | null = null
// do stuff
if (typeof result !== "string") return null;
// do more stuff
return result
.split("__")
.map((word:string) => word.toUpperCase())
.join("")
: result;
}
此外,根據您的 TS 版本,您可以壓縮這些檢查,使其更加簡潔(使用空合並和可選鏈接)
function foo(){
let result: string | undefined;
// do stuff to possibly make result a string
// do more stuff
return result
?.split("__")
.map((word:string) => word.toUpperCase())
.join("") ?? null
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.