大佬们,请教个ts的问题?

// 入参可能是这两种类型
type Params = { id: string } | { name: string }

function (params: Params) {

  // 变量 a 可能是这两种类型
  let a : A | B

  // 期望
  // 入参为 { id: string } 将变量a 类型确定为 A
  // 入参为 { name: string } 将变量 a 类型确定为 B

  // 例如,当入参为 { id: string } 时,
  // 代码执行到这里,a 可以调用 A 类型的一些属性和方法

}
阅读 1.3k
2 个回答
✓ 已被采纳

image.png
看上图,考虑:直接通过 in 关键字 做类型保护。

看下图继续理解下:
image.png

函数类型重载就行了

type A = { id: string };
type B = { name: string };
type C = string;
type D = number

function A(params: A): C;
function A(params: B): D;
function A(params: A | B): C | D {
  if ((params as A).id) {
    return "2"
  } else {
    return 1

  }
}

A({id:"1"}) // string
A({name:"1"}) // number
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题