[掘竅] TypeScript
判斷某個型別參數是否是 never
type IsNever<T = never> = [T] extends [never] ? true : false;
type Foo = IsNever; // true
type Bar = IsNever<string>; // false
這是一個滿有趣的應用,要判斷某個型別是不是 never 需要使用 tuple 的方式。
如果寫成下面這樣,因為 never 是空集合,所以當 never extends never 時,不是 true 也不是 false,而會是 never
// 因為 never 是空集合,所以結果不會
type IsNever<T = never> = T extends never ? true : false;
type Foo = IsNever; // never
type Bar = IsNever<string>; // false
這就類似,當 any extends string 時可能是 true 也可能是 false,最終會得到 boolean:
type T1 = any extends string ? true : false; // boolean
忽略掉 TS 的錯誤
// @ts-expect-error
// 意思是我認爲這裡 ts 應該會覺得有錯,而我要把它忽略
// 當 ts 發現下面這行並沒有檢查到錯誤時,會跳出提示
// @ts-ignore
// 意思是不管這裡有沒有錯,ts 都不要理他
