首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在TypeScript中检测固定长度元组类型和数组类型

问在TypeScript中检测固定长度元组类型和数组类型
EN

Stack Overflow用户
提问于 2021-02-17 03:35:52
回答 1查看 593关注 0票数 1

我有一个泛型函数,我想让它只接受固定长度(可能是混合类型)元组作为类型参数。我不知道可能的元组类型在预先-它应该接受任何固定长度元组。

代码语言:javascript
复制
doSomething<[number, string, boolean]>(); // this should be okay
doSomething<number[]>(); // this should throw a compiler error

我知道我可以将长度限制在一个特定的数字文本(为简洁而省略的数组检查):

代码语言:javascript
复制
type LengthOf<N extends number> = {
  length: N;
}
function doSomething<T extends LengthOf<2>(){};
doSomething<[any, any]>(); // ok
doSomething<[any]>(); // error

但我不能使用这种方法将长度限制为任何数字文字,因为任何数字文字都会扩展数字,这也是可变长度数组的length类型。

这在TypeScript中是可能的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-17 03:41:34

我不知道您为什么要这样做,但是您可以增强属约束,以便它只接受length属性比number更窄的数组类型

代码语言:javascript
复制
function doSomething<
    T extends (number extends T['length'] ? [] : any[])
>() { };

这将允许固定长度的元组或长度为数值文本(如带有可选元素的元组 )的合并的元组,

代码语言:javascript
复制
doSomething<[number, string, boolean]>(); // okay
doSomething<[number, string, boolean?]>(); // okay

当不允许数组或开放元组(使用rest元素)时:

代码语言:javascript
复制
doSomething<number[]>(); // error
doSomething<[number, string, ...boolean[]]>(); // error

操场链接到代码

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66235379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档