热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

TypeScript3.0中数组的泛型

如何解决《TypeScript3.0中数组的泛型》经验,为你挑选了1个好方法。

因此,我看到3.0附带了rest参数的通用类型,因此您可以执行以下操作:

static identity(...values: T): T;

是否有可能为数组参数获取类似的东西,或者当前是否有我不知道的东西在工作?例如,如果您查看es6-promise声明

static all(values: [T1 | Thenable, T2 | Thenable, T3 | Thenable, T4 | Thenable , T5 | Thenable, T6 | Thenable, T7 | Thenable, T8 | Thenable, T9 | Thenable, T10 | Thenable]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]>;
static all(values: [T1 | Thenable, T2 | Thenable, T3 | Thenable, T4 | Thenable , T5 | Thenable, T6 | Thenable, T7 | Thenable, T8 | Thenable, T9 | Thenable]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9]>;
static all(values: [T1 | Thenable, T2 | Thenable, T3 | Thenable, T4 | Thenable , T5 | Thenable, T6 | Thenable, T7 | Thenable, T8 | Thenable]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8]>;
static all(values: [T1 | Thenable, T2 | Thenable, T3 | Thenable, T4 | Thenable , T5 | Thenable, T6 | Thenable, T7 | Thenable]): Promise<[T1, T2, T3, T4, T5, T6, T7]>;
static all(values: [T1 | Thenable, T2 | Thenable, T3 | Thenable, T4 | Thenable , T5 | Thenable, T6 | Thenable]): Promise<[T1, T2, T3, T4, T5, T6]>;
static all(values: [T1 | Thenable, T2 | Thenable, T3 | Thenable, T4 | Thenable , T5 | Thenable]): Promise<[T1, T2, T3, T4, T5]>;
static all(values: [T1 | Thenable, T2 | Thenable, T3 | Thenable, T4 | Thenable ]): Promise<[T1, T2, T3, T4]>;
static all(values: [T1 | Thenable, T2 | Thenable, T3 | Thenable]): Promise<[T1, T2, T3]>;
static all(values: [T1 | Thenable, T2 | Thenable]): Promise<[T1, T2]>;
static all(values: [T1 | Thenable]): Promise<[T1]>;
static all(values: Array>): Promise;

规范Promise.all是,它接受一个可迭代的参数,而不是其他参数。不必写出所有这些类型确实很不错,但是根据我对TypeScript 3.0的专业知识,目前还不可能。我对么?



1> jcalz..:

更新2019-10-06:是的,从TS3.1开始是可能的。

请参见此问题和此注释,以获取在您要推断的内容中包括元组类型的技巧。像这样:

declare function all( // note | [] here
  values: T
): Promise<{ [K in keyof T]: T[K] extends Thenable ? R : T[K] }>;

请注意,类型any[] | []any[](类型[]可分配给any[],所以any[] | []类型实际上与)没有什么不同any[],但是[]提到了空元组后,编译器便会暗示您想T将其推断为元组如果可能的话。和它的工作原理:

declare const thenableString: Thenable;
const a = all(["hey", thenableString, 123]); // Promise<[string, string, number]>;

请参阅Playground中的代码链接。


下面的旧答案:

我认为TypeScript 3.1将引入元组映射,这将对此有所帮助。但是不幸的是,我不知道一种说服不使用rest参数将类似数组的函数参数推断为元组的方法。我现在最接近您想要的(typescript@next用来获取映射元组)的是:

declare function all(
  values: T
): Promise<{[K in keyof T]: T[K] extends Thenable ? R : T[K]}>;
function tuple(...args: T) { return args};
declare const thenableString: Thenable;
const a = all(tuple("hey",thenableString,123)); // Promise<[string, string, number]>;

如果我找到更好的解决方案,我会考虑更多,并编辑答案。


更新:目前看来不可能。值只是不会被推断为元组。这是一个长期存在的问题,(最初)被认为是有意的行为...随着元组变得越来越强大,存在另一个最近的GitHub问题,有关此问题,并Promise.all在注释中具体说明了它的需要。如果您关心它,则可能要转到该问题上并给它打个电话或参加讨论。

希望对您有所帮助。祝好运。


推荐阅读
  • 枚举使用枚举我们可以定义一些带名字的常量。使用枚举可以清晰地表达意图或创建一组有区别的用例。TypeScript支持数字的和基于字符串的枚举。数字枚举首先我们看看数字枚举,如果你使 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 接口我们使用接口来定义对象的类型。接口是对象的状态(属性)和行为(方法)的抽象(描述)简单理解就是:为我们的代码提供一种约定我们使用关键字interface来声 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
author-avatar
gogo迷失的大G
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有