【问题标题】:Typescript: cast strict primitive type to primitive打字稿:将严格的原始类型转换为原始类型
【发布时间】:2021-06-16 19:33:25
【问题描述】:

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

【问题讨论】:

    标签: typescript types casting


    【解决方案1】:

    也许有用

    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'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      • 2013-06-19
      • 2011-02-13
      • 2013-01-12
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      相关资源
      最近更新 更多