我正在處理一些從 graphQL-data 自動生成的型別,并且需要一種方法來針對 null、undefined 和 null[] 進行型別保護以縮小型別。
到目前為止,我得到了這個:
export default function validData<T>(
condition: T
): asserts condition is Exclude<T, null | undefined | null[]> {
if (
condition === null ||
condition === undefined ||
(Array.isArray(condition) && typeof condition[0] === null)
) {
throw new Error(
`missing data: ${condition} returned null, null[] or undefined`
);
}
}
然后我簡單地使用這樣的函式:
validData(menuDataToNarrow):
該函式對 null 和 undefined 有效,但如果資料包含空陣列,我似乎無法理解如何捕獲和拋出錯誤?到目前為止,上面的代碼是我最好的(非作業)嘗試。當涉及到 null 和 undefined 時,型別按預期縮小,但我仍然得到:
XXX is not assignable to type null[]
知道如何解決這個問題嗎?
編輯:我想出了這個有效的完成的守衛:
export default function validData<T>(
condition: T
): asserts condition is Exclude<T, null | undefined | null[]> {
if (
condition === null ||
condition === undefined ||
(Array.isArray(condition) && condition.every((x) => x === null))
) {
throw new Error(
`missing data: ${condition} returned null, null[] or undefined`
);
}
}
uj5u.com熱心網友回復:
null[]將是一個空陣列。您可以檢查與![針對 null[] 的型別保護](https://img.uj5u.com/2021/11/11/aa297fec9c784e3cb99e38cd066de80f.png)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/355582.html
上一篇:將每個陣列項變成鍵值對
