ts 属性类型如何关联?-灵析社区

Fiona

type AddDataOtherType = { component: T; // 组件名称 transition?: 'fade-in-linear' | 'fade-in' | 'zoom-in-center' | 'zoom-in-top' | 'zoom-in-bottom'; // 组件的显隐动画 }; export type AddDataType = (RequiredKeys > extends true ? { data: DataType } : { data?: DataType }) & AddDataOtherType; const data: AddDataType = { component: 'AlarmTips' }; const data1: AddDataType = { component: 'AlarmTips' }; ![image.png](https://wmlx-new-image.oss-cn-shanghai.aliyuncs.com/images/20241102/697c209a00cc278f8e9abe325f2d0d7e.png) 为什么需要这样`AddDataType` 才能正确获取类型? 不是已经使用 ``进行关联了吗? 应该可以通过`component: T;`的类型得到`AddDataType`接收类型的啊。 * * * 测试用例补充: type DataOtherType = { component: T; // 组件名称 }; type TL = '1' | '2'; type DataType1 = DataOtherType & (T extends '1' ? { data?: 1 } : { data: 1 }); const data2: DataType1 = { component: '1' }; const data3: DataType1 = { component: '2' }; const data4: DataType1 = { component: '2' };

阅读量:12

点赞量:0

问AI
"const data: AddDataType"定义"data"的类型为"AddDataType",无论你用它的哪个子类型给"data"赋值,"data"本身的类型都是"AddDataType",ts只检查值是否兼容"AddDataType",不会根据值的类型来收缩"data"的类型(可以把const换成let思考一下) 一定要让data拿到子类型的话可以用这种方式 function createAddData(t: T) { return { component: t } as AddDataType; } const data = createAddData('AlarmTips');