我有一个将字符串解析为值的函数,如果失败则返回 defaultValue
。问题是此代码返回的原语类型过于严格(例如,false
而不是 boolean
)。我该如何解决?也许我应该为 defaultValue
使用一些演员表?谢谢
export function safeParse<T>(text: string, defaultValue?: T): T | undefined {
try {
return JSON.parse(text);
} catch {
return defaultValue; // some cast here?
}
}
const res1 = safeParse('128', 0); // typeof res1 is '0 | undefined'
const res2 = safeParse<number>('128', 0); // OK: typeof res2 is 'number | undefined'
const res3 = safeParse('128', 0 as number); // OK: typeof res3 is 'number | undefined'
答案 0 :(得分:0)
也许有用
type StrictType<T> = T extends number
? number
: T extends string
? string
: T extends boolean
? boolean
: T
export function safeParse<T>(text: string, defaultValue?: StrictType<T>): StrictType<T> | undefined {
try {
return JSON.parse(text);
} catch {
return defaultValue; // some cast here?
}
}
const res1 = safeParse('128', 0); // typeof res1 is 'number | undefined'
const res2 = safeParse('true', false); // typeof res2 is 'boolean | undefined'