问题:ts includes 只能传入元组内的值
当使用 `as const` 将数组变为只读元组后,TypeScript 会对 `includes` 方法的参数进行严格类型检查:参数类型必须是元组内字面量类型的联合,否则会报错。
示例
const a = ['1', '2'] as const; // 类型为 readonly ['1', '2'] const b = ['1'] as const; // 类型为 readonly ['1'] const str: '1' | '2' = '2'; a.includes(str); // ✅ 允许,因为 a 中包含 '1' 或 '2' b.includes(str); // ❌ 类型“"2"”的参数不能赋给类型“"1"”的参数。ts-plugin(2345)
原因
- `as const` 将数组推断为只读元组,元素类型为字面量(如 `'1'`、`'2'`)。
- `includes` 方法的类型签名要求参数必须是元组元素类型的子集。
- 对于 `b`,元素类型是 `'1'`,因此 `includes` 只接受 `'1'` 类型。
- 变量 `str` 类型为 `'1' | '2'`(尽管运行时值是 `'2'`),类型检查时认为可能为 `'1'` 或 `'2'`,故拒绝调用。
解决方案
其中一种解决方案是:
b.includes(str as any);
另外,还可以自己写一个 includes 工具函数去处理,也有其他方案,这里就不再展开
参考:https://blog.csdn.net/gitblog_00585/article/details/151456391
本站文章除注明转载/出处外,均为原创,若要转载请务必注明出处。转载后请将转载链接通过邮件告知我站,谢谢合作。本站邮箱:admin@only4.work
尊重他人劳动成果,共创和谐网络环境。点击版权声明查看本站相关条款。
GitHub登录