P粉8785424592023-08-15 13:04:14
你可以重構textTransformer()
方法,接受一個泛型參數,並使用條件型別來檢查toNumberIfNeeded
是否為true
# 或 false
。我認為 TypeScript 無法自動縮小回傳值的類型。你必須使用類型斷言,否則返回類型將被推斷為 string | number
。
interface Options { uppercase: boolean; filterSpecialChars: boolean; toNumberIfNeeded: boolean; } export const textTransformer = <T extends Options>( text: string, options?: T ): T["toNumberIfNeeded"] extends true ? number : string => { const {uppercase, filterSpecialChars, toNumberIfNeeded} = options || {}; // 我的处理逻辑代码 return (toNumberIfNeeded ? parseInt(text) : text) as ReturnType< typeof textTransformer >; }; textTransformer("hello"); // 推断为 string textTransformer("123", { toNumberIfNeeded: true, uppercase: false, filterSpecialChars: false }); // 推断为 number