问题标签 [typescript3.0]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
120498 浏览

typescript - “未知”与“任何”

unknown根据他们的 wiki,TypeScript 3.0 引入了类型:

unknown 现在是保留类型名称,因为它现在是内置类型。根据您对 unknown 的预期用途,您可能希望完全删除声明(支持新引入的 unknown 类型),或将其重命名为其他名称。

unknown和有什么区别any?我们什么时候应该使用unknownover any

0 投票
1 回答
167 浏览

typescript - 在 Typescript 3.0 中创建具有类型检查参数的工厂

我对 TS 3.0 中新的可提取参数列表感到非常兴奋,作为了解它如何工作的一种方式,我想创建一个工厂。

我有这个工作:

游乐场链接

这很酷,但是 create() 函数的定义有点长并且包含一定数量的重复。我试图简化这一点:

游乐场链接

正如您在操场上看到的那样,这有错误:

类型 '(...params: any) => any' 不能分配给类型 'T extends new (...args: infer P) => infer R ?(...args: P) => R : 从不'。

rest 参数必须是数组类型。

有没有办法让这个更短、更简单的声明工作?

0 投票
1 回答
8171 浏览

typescript - 如何在 Typescript 3.0 中将元组“映射”到另一个元组类型

我有Maybe类型的元组:

我想把它变成一个类型的元组:

type TupleIWant = [string, number, boolean];

所以我尝试了这个:

哪个不起作用:-(

我得到(string | number | boolean)[]而不是我想要的元组:[string, number, boolean]

我目前想做的事情可能吗?

0 投票
1 回答
6023 浏览

typescript - TypeScript 3.0 中的数组泛型

所以我看到 3.0 带有用于休息参数的通用类型,所以你可以做这样的事情:

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

规范Promise.all是它接受一个可迭代的而不是休息参数。不必写出所有这些类型真是太好了,但是根据我对 TypeScript 3.0 的第三知识,这还不可能。我对么?

0 投票
1 回答
9491 浏览

typescript - 如何在 TypeScript 3+ 中正确键入通用元组剩余参数?

在 TypeScript 3.0 之前,推断 N 元函数的类型涉及为已知的泛型参数创建任意数量的函数重载,然后使用any类型化的剩余参数之类的东西编写函数实现。TypeScript 3.0 改变了这一点,因此泛型类型可以扩展any[],它充当泛型元组。

这种更改对我来说很有意义,并且对我自己的泛型参数来说效果很好,但是我无法像在 3.0 之前那样让类型流经返回类型。

这是一个例子:

假设我只有 3 个重载(最多T3)。如果我resolveObservables通过将数组传播到函数调用中来使用,在 TS 3.0 中,我会得到一个错误:

预期有 0​​-3 个参数,但有 0 个或更多。

我可以将它与固定的 arity 调用一起使用,但是一旦我尝试传播,就会出错。任何使这项工作的尝试都以某种方式失败了。例如:

将无法捕获任何类型(类型为{})。

有什么方法可以修改这些类型,这样我就可以在不失去使用扩展参数的能力的情况下让类型流过?在我使用传播的情况下,我并不真正关心类型,如果我这样做了,我假设我可以只使用元组类型。但是根据我到目前为止的尝试,我可以使用传播但丢失类型,或者有类型但不能使用传播。

我在这里想念什么?

0 投票
1 回答
967 浏览

typescript - 通过 typescript 3.0 通用休息元组类型从类元组返回实例元组

从类类型中获取正确的实例类型时,如下所示:

我不知道如何使用新的 TS 3.0 功能(通用休息参数)获得正确的实例类型

0 投票
1 回答
102 浏览

typescript - 给一个字符串一个类型

在许多情况下,我有一个接受许多字符串的函数:

因为从类型的角度来看,参数是可以互换的,我可能会弄错顺序,传递两个而不是一个,或者其他什么。

有什么方法可以让我以某种方式输入每个参数吗?

我能想到的唯一方法是一种愚蠢的方法,如下所示:

然后像这样使用它:

但由于显而易见的原因,该解决方案并不理想。有任何想法吗?

0 投票
3 回答
8559 浏览

typescript - TypeScript 3 的通用 curry 函数

TypeScript 3.0 引入了通用的剩余参数

到目前为止,curry函数必须在 TypeScript 中使用有限数量的函数重载和一系列条件语句来查询实现中传递的参数的数量。

我希望通用休息参数最终提供实现完全通用解决方案所需的机制。

我想知道如何使用这个新的语言特性来编写一个通用curry函数......当然假设它是可能的!

使用我在hackernoon上找到的解决方案稍微修改的使用rest params的JS实现看起来像这样:

使用通用的剩余参数和函数重载,我在 TypeScript 中注释此函数的尝试curry如下所示:

但是 TypeScript 会抛出错误:

我不明白在哪里以及为什么R被推断为{}

0 投票
1 回答
897 浏览

typescript - 元组类型的 Promise.all 包装器

我想使用元组类型为 promise.all 创建一个包装器。我正要写这样的东西:

预期的行为应该是当 Promise.all 将被解析时,返回的数据将采用提供的元组的形式。任何想法如何实现这种行为?

0 投票
1 回答
60 浏览

typescript - TypeScript 中带有推导和 `keyof` 的细粒度类型

所以我有一个类型

我有一个功能

这种繁重的泛型表达式的想法是静态推断结果的类型。它有效,我编写fn('a')并且编译器推断它的类型,<"a">(name: "a") => { a: T2; }除了它说的函数本身Type '{ [x: string]: T2; }' is not assignable to type '{ [P in N]: T2 }'.

问题:有没有办法为函数编写类型,fn从文字中保持良好的静态类型推断,但让讨厌的类型错误消失?

只需使用覆盖类型as即可,但我的尝试没有成功。