问题标签 [typescript-generics]

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 投票
1 回答
68 浏览

typescript - 泛型中 [typof T] 的原因与硬编码类型具有不同的语义?

所以我在 typescript 中发现了一个技巧,通过将类型映射到键值对然后使用该keyof类型创建一个可以是映射中任何值的类型,将对象类型转换为可区分的联合。这是一个简单的例子:

如果您想指定一个非常大的可区分联合,这非常有用,但是当您尝试使此构造完全通用时,您最终会得到不同的类型。

这应该是相同的类型,但由于某种原因它不是。我试图查看打字稿文档以找到这种行为的一些原因,但我不能。有谁知道这种差异背后的原因?或者更好的是,有没有人知道一种解决这种行为并使其完全通用的方法?

0 投票
2 回答
3874 浏览

typescript - typescript :具有原始类型约束的泛型类型

我在打字稿中有以下通用类

但我不知道为什么会出现此错误类“(匿名类)”错误地扩展了基类“列”。属性“getValue”的类型不兼容。类型 '(value: number) => number' 不可分配给类型 '(value: number) => S'。类型“数字”不可分配给类型“S”

0 投票
1 回答
2530 浏览

angular - 如何在 Angular4 中提供使用泛型的服务?

我注意到我的项目有很多解析器服务,尽管它们使用不同的实体和存储库托管相同的代码。所以我接受了挑战,使用泛型将它们简化为单个解析器服务:

可以指定实体类型 T 和存储库类型 R。但是我无法使用此服务:

一旦我在DetailResolver<Message, MessageService>编译器中指定泛型类型,我就希望我创建一个实例:

typeof DetailResolver 类型的值不可调用。你的意思是包括新的?

我不太熟悉 angular4 DI 内部。任何人都可以描述什么是错的,这个问题有什么解决方案吗?我正在使用角度 4.3。

0 投票
5 回答
49147 浏览

angular - 声明一个具有泛型类型的组件

是否可以在 Angular 4 中声明具有泛型类型的组件?

以下代码会导致构建错误:

执行时的错误ng serve是:

例子:

以下示例尝试实现一个通用数据表,其中@Input() data从一个“调用此组件”的组件更改为另一个。问题是可以BehaviorSubject<any[]>更改为传递给组件的泛型类型在哪里BehaviorSubject<T[]>T

0 投票
1 回答
77 浏览

typescript - How to declare generic property that accept only extension of some class in typescript?

How can I declare something like that:

So i can push objects that extends Component class to componentsArr

Edit: I have another problem

Here are screenshot:

Generic type problem

Problem description

What im doing worng?

0 投票
2 回答
1198 浏览

typescript - 如何从超类方法返回子类型而不是超类类型

我认为这是正确实现泛型的问题,但我不确定。

我在这里创建了一个代表问题的 Github 要点: https ://gist.github.com/ORESoftware/66b72b4b85262d957cb03ad097e4743e

假设我有这个超类:

和几个子类,例如一个看起来像这样:

所以如果我这样做

new B().foo().bar()

这将在运行时工作,但不能使用 TypeScript 编译。那是因为foo()将返回类型声明为A,而不是 type B

我怎样才能返回类型this,而不是声明foo()总是返回类型A

我试过这个:

在此处输入图像描述

但我收到此错误:

在此处输入图像描述

0 投票
2 回答
96 浏览

typescript - 从映射解析并间接调用的函数的类型推断

我正在尝试使打字稿打字与一种模式一起工作,其中有一个函数对象和一个函数,该函数在对象call(name, arg)查找函数并使用.namearg

假设我有一个将名称映射到函数的对象:

我还有一个函数call(name, p),它从 中解析函数REGISTRY并用p. 现在,我想输入函数,如果提供了无效参数,它会抱怨:

如何从 的类型中解析P参数的类型p(以及返回类型RRegistry.str2numb?甚至可能吗?

我已经做到了这一点,但它不起作用:

但是,这有效:

0 投票
1 回答
174 浏览

typescript - 从接口扩展 Typescript 类

如何使用 Typescript 中的接口属性扩展类?我意识到这必然会使属性未初始化。

我的唯一目的是减少代码冗余。出现在接口中的属性声明将相同地出现在每个类实现中。我宁愿只从界面集中维护这些属性。

我想写如下内容,但这是充满错误的谜语:

相反,我发现自己能够编写这个,它可以构建但不能完成工作:

很明显,当我添加implements Spec到 MyModel 时它不起作用:

因为那时我得到了错误,Property 'id' is missing in type 'MyModel'.

我不担心让接口属性未初始化,因为这总是可以从构造函数中完成。我正在处理的过多接口是更大的噩梦。

注意:我使用底层 JS 模块来填充规范属性,因此如果没有提供它们的声明,编译器不一定会抱怨。

0 投票
1 回答
8042 浏览

typescript - 将泛型类型限制为 Typescript 中的几个类之一

在 Typescript 中,如何在编译时将泛型类型限制为多个类之一?例如,你如何实现这个伪代码?

此外,我希望能够将属性(或任何变量)分配给泛型类型选项之一的特定后代类型,而不仅仅是给定类型之一。例如:

这个答案显然并不明显,因为我花了几个小时。在我看来,这个问题的某种形式已经被问过了,但给出的解决方案甚至不适合我。可能是仅在非常特定的背景下才回答了先前的问题,因为赞成票的数量表明它正在解决某些人的问题。

我发布这个新问题是为了清楚地说明一般问题并跟进解决方案。

0 投票
2 回答
290 浏览

typescript - 使用泛型指定返回值的类型

我在 Angular 服务上有这个方法:

请注意,这LastErrorType

这就是问题所在,有时我传递一个键,我知道“返回”类型将是一个数组,例如:

但如果我这样做:

tsc 会抱怨并说返回类型不可分配给Promise<Array<any>>.

如何使用泛型,以便getFromSyncStorage可以正确键入此通用方法?