打字稿:将严格的原始类型强制转换为原始类型

时间:2021-03-19 11:33:38

标签: typescript types casting

我有一个将字符串解析为值的函数,如果失败则返回 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'

1 个答案:

答案 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'
相关问题