// 目前需要这样的结构 interface IChildLine { isLine: boolean points: number[]}interface IChildCircle { isCircle: boolean points: number[]}interface ITab{ children:(IChildCircle | IChildLine)[]}// 也就是说 ITab 的 children 要么是 isCircle 要么是 isLine ,在一个对象里不能同时存在我感觉有优化空间,有大佬知道怎么优化吗?
不知道是不是我理解得太简单了
interface ITab { children: Array<IChildLine> | Array<IChildCircle>}
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方法的第二个参数,这时候会报错,该怎么处理?