TypeScript中数组与对象类型的交叉类型对象如何正确定义?
解析TypeScript中
unknown[] & A交叉类型的对象形态 unknown[] & A是数组类型与接口类型的交叉类型,意味着这个对象必须同时满足两个条件:
- 是一个
unknown[](可容纳任意类型元素的数组) - 拥有
A接口定义的text: string属性
你的代码报错是因为[{text: "ASDF"}]只是一个元素包含text属性的数组,但数组自身并没有text属性,不符合交叉类型的要求。
正确的对象形态示例
你可以通过两种方式创建符合AB类型的对象:
方式1:直接定义包含数组特征与text属性的对象
interface A { text: string } type AB = unknown[] & A // 手动定义数组的length和元素,同时添加text属性,结合类型断言 let a: AB = { 0: "任意值", length: 1, text: "ASDF" } as AB;
方式2:用Object.assign合并数组与A类型对象
interface A { text: string } type AB = unknown[] & A // 先创建一个unknown数组,再合并带有text属性的对象 let baseArr: unknown[] = [1, "test", false]; let a: AB = Object.assign(baseArr, { text: "ASDF" });
这两种方式创建的对象,既可以像数组一样访问元素、使用数组方法,同时也能直接访问text属性。
内容的提问来源于stack exchange,提问作者user2565010
相关产品推荐
相关产品推荐

