如果实现可以让 typescript 不报错误?

type A = {
  type: 'decimal',
  value: number[]
}
type B = {
  type: 'hex',
  value: string[]
}
const range: A | B = {
   value: [0, 127],
   type: 'decimal'
}
function transform(range: A | B) {
  if (range.type === 'hex') {
     range.type = 'decimal'
     range.value = [parseInt(range.value[0], 16), parseInt(range.value[1], 16)];
   }
} 

transform 函数的作用是如果发现类型是 16 进制的,会把 value 转化为 10 进制的。上面的实现会让 typescript 报错,如何更好地实现 transform 函数让 typescript 不报错

阅读 2.1k
2 个回答
type A = {
  type: 'decimal',
  value: number[]
}
type B = {
  type: 'hex',
  value: string[]
}
const range: A | B = {
   value: [0, 127],
   type: 'decimal'
}
function transform(range: A | B) {
  if (range.type === 'hex') {
    Object.assign({ type: 'decimal', value: [parseInt(range.value[0], 16), parseInt(range.value[1], 16)] })
   }
} 
type A = {
  type: 'decimal',
  value: number[]
}

type B = {
  type: 'hex',
  value: string[]
}

const range: A | B = {
   value: ['0', '7f'],
   type: 'hex'
}

function transform(range: A | B): A | B {
  if (range.type === 'hex') {
    return {
      type: 'decimal',
      value: [parseInt(range.value[0], 16), parseInt(range.value[1], 16)]
    };
  } else {
    return range;
  }
} 

const newRange = transform(range);
console.log(newRange);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题