当前位置: 首页 > 知识库问答 >
问题:

javascript - [ts] 排他联合类型问题?

施玉宸
2023-11-06
// 目前需要这样的结构 interface IChildLine {    isLine: boolean    points: number[]}interface IChildCircle {    isCircle: boolean    points: number[]}interface ITab{    children:(IChildCircle | IChildLine)[]}// 也就是说 ITab 的 children 要么是 isCircle 要么是 isLine ,在一个对象里不能同时存在我感觉有优化空间,有大佬知道怎么优化吗?

共有2个答案

步兴德
2023-11-06

不知道是不是我理解得太简单了

interface ITab {  children: Array<IChildLine> | Array<IChildCircle>}
羊舌自强
2023-11-06
interface IChildBase {    points: number[];}interface IChildLine extends IChildBase {    type: 'line';}interface IChildCircle extends IChildBase {    type: 'circle';}type ChildShape = IChildCircle | IChildLine;interface ITab {    children: ChildShape[];}// 用类型守卫来检查 children 的类型function isLine(child: ChildShape): child is IChildLine {    return child.type === 'line';}function isCircle(child: ChildShape): child is IChildCircle {    return child.type === 'circle';}// 示例const tab: ITab = {    children: [        { type: 'circle', points: [1, 2, 3] },        { type: 'line', points: [4, 5] }    ]};tab.children.forEach(child => {    if (isLine(child)) {        console.log('This is a line.', child.points);    } else if (isCircle(child)) {        console.log('This is a circle.', child.points);    }});
 类似资料:
  • 这里的 create 方法参数的类型理想状态下应该是 ParamsA | ParamsB,这里为什么会是 ParamsA & ParamsB 在线查看代码

  • 主要内容:TypeScript,JavaScript,TypeScript,JavaScript,联合类型数组,TypeScript,JavaScript联合类型(Union Types)可以通过管道(|)将变量设置多种类型,赋值时可以根据设置的类型来赋值。 注意:只能赋值指定的类型,如果赋值其它类型就会报错。 创建联合类型的语法格式如下: 实例 声明一个联合类型: TypeScript var val:string|number val = 12 console.log("数字为 "+ val

  • 本节介绍联合类型,它使用管道符 | 把多个类型连起来,表示它可能是这些类型中的其中一个。我们把 | 理解成 or,这样便于轻松记忆。 1. 慕课解释 联合类型与交叉类型很有关联,但是使用上却完全不同。区别在于:联合类型表示取值为多种中的一种类型,而交叉类型每次都是多个类型的合并类型。 语法为:类型一 | 类型二。 2. 简单示例 联合类型之间使用竖线 “|” 分隔: let currentMont

  • 为什么需要这样AddDataType<'AlarmTips'> 才能正确获取类型? 不是已经使用 <T>进行关联了吗?

  • 定义一个枚举,将其中一个取值作为replace方法的第二个参数,这时候会报错,该怎么处理?