如何不使用双重三元表达式检测Array<any>类型
检测类型是否为
Array<any>的简化条件类型写法 核心需求是精准判断一个类型是否为**Array<any>**(而非Array<string>、number[]这类其他数组类型)。可以通过同时验证T extends Array<any>和Array<any> extends T两个条件实现,无需嵌套三元表达式的写法如下:
type IsAnyArray<T> = [T, Array<any>] extends [Array<any>, T] ? T : 'not any array';
写法说明
通过元组包裹两个类型,利用TypeScript条件类型的匹配规则,只有当元组的每个对应位置都满足extends关系时,整个表达式才会返回true。这相当于同时完成了双向类型校验:
- 第一个位置校验
T extends Array<any> - 第二个位置校验
Array<any> extends T
只有当两个条件都成立(即T就是Array<any>)时,才会返回T,否则返回'not any array'。
测试示例
// 结果为 Array<any> type Test1 = IsAnyArray<Array<any>>; // 结果为 'not any array' type Test2 = IsAnyArray<Array<string>>; // 结果为 'not any array' type Test3 = IsAnyArray<number[]>; // 结果为 'not any array' type Test4 = IsAnyArray<string>;
内容的提问来源于stack exchange,提问作者Matthieu Riegler
相关产品推荐
相关产品推荐

