typescript 条件类型?

新手上路,请多包涵
interface IdLabel {
  id: number;
}

interface NameLabel {
  name: string;
}

type NameOrId<T extends number | string> = T extends number
  ? IdLabel
  : NameLabel;

let idLabel: IdLabel = {
  id: 123,
};

let nameLabel: NameLabel = {
  name: "123",
};

function createLabel<T extends number | string>(arg: T): NameOrId<T> {
  return arg === "string" ? nameLabel : idLabel;
}

如何实现这个createLabel函数体,按我的理解这个实参返回NameLabelIdLabel类型的值

按我的写法,提示Type 'IdLabel | NameLabel' is not assignable to type 'NameOrId<T>'.

有没有大佬解惑下,感恩

阅读 1.4k
1 个回答

这种情况用Function Overloads

function createLabel(arg: number): IdLabel
function createLabel(arg: string): NameLabel
function createLabel(arg: string | number) {
  if (typeof arg === 'number') return idLabel
  return nameLabel
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏