问题标签 [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 回答
138 浏览

typescript - 强制泛型类型值的类型安全

我如何以某种方式使用泛型来强制将值的类型设为特定类型?

这就是我试图成为我的映射功能,但我必须附加as V2以使 TS 不会抱怨:/

我希望 TS 允许我这样做

...但不是这个

我如何让 TS 抱怨后者?

0 投票
2 回答
212 浏览

typescript - 使用 TypeScript 泛型作为索引

我正在尝试为我的事件侦听器创建类型信息。由于所有事件侦听器都设置在同一个.on()函数上,因此我使用的是泛型。

connected当我尝试将 anumber用作 a时,我希望上面的内容会给我一个事件错误Error,但是对于我的回调函数,我根本没有得到任何类型提示。

但是,如果Callback匹配的所有函数定义,它确实开始工作。如下:

我在 VS 代码中的意思的 GIF:

动图

难道我做错了什么?

0 投票
1 回答
27395 浏览

typescript - Typescript 中的类型化通用键值接口

我有以下示例对象:

界面应如下所示:

这当然行不通,因为没有T定义。

所以我想这样做:

但我也被卡住了。因为我无法定义FooValue.

如果我使用FooValue<any>,那么当然所有内容都输入为any. 虽然那行不通。

我想确保的类型default和参数类型fn总是相同的。

有什么解决办法吗?还是不能这样做?

0 投票
1 回答
14868 浏览

typescript - TypeScript 泛型:'类型不可分配给类型 T'

我已经创建了一个工厂,它将创建某些类的实例。我想使用泛型来确保返回的所有对象都来自扩展抽象类的子类。

我认为createInstance下面显示的方法的逻辑可以描述为'createInstance()将返回一个类型,该类型T被限制为扩展Animal的类。

如您所见,Lion 扩展了 Animal,但我仍然收到编译器警告type Lion is not assignable to type T

我在TypeScript Generics文档的末尾读到:

在 TypeScript 中使用泛型创建工厂时,需要通过其构造函数引用类类型。例如,

但是如果可能的话,我真的不想将类构造函数传递给函数,并且想了解为什么我not assignable to type T首先会收到消息。

谢谢

0 投票
1 回答
43 浏览

typescript - 在 TypeScript 中,如何声明具有 2 个参数的泛型,其中第一个是返回特定类型的第二个键?

我正在寻找一个像这样的通用类:

显然,上面的代码无法推断出的类型,t[ID]我们得到了一个隐含的any. 我怎样才能强制使用泛型T[ID]将是一个string

0 投票
1 回答
246 浏览

typescript - 打字稿泛型中的自定义枚举过于复杂

如果有更简单的方法来写下来,因为这是非常重复的,而且看起来非常错误......

我希望 IDE 能够告诉我FolderVisibility.PUBLIC == 'public'as 参数无论如何都是只读的。

这是Enum类,它几乎没有自己的属性和一个功能

关键是,如果我复制构造函数中使用的对象 4 次,它甚至会告诉我它FolderVisibility.values的类型'public' | 'private'

PS:我试过这个,但它会给我stringFolderVisibility.values此外,它仍然很长。常量数据 = { PUBLIC: 'public', PRIVATE: 'private' }

0 投票
2 回答
3426 浏览

typescript - 获取使用泛型的函数的返回类型

免责声明:过度简化的功能如下,我知道它们没用

上面的代码编译得很好。但我需要将结果thinger<T>放入一个对象中。

但是我丢失了我的类型信息所以myThingHolder.thing.a不起作用

类型“{}”上不存在属性“a”

所以我尝试了以下

typeof thinger<T>不是有效的打字稿。

如何获取基于泛型具有不同返回类型的函数的返回类型?

0 投票
1 回答
196 浏览

typescript - 返回 subject.asObservable() 时的打字稿错误

我有一个问题希望你能帮助我。谢谢

升级到 Typescript 2.9.1 后,编译器抱怨没有返回方法应该返回的类型。

当前代码:

我的解决方案:

到目前为止,我正在通过做我的回报,虽然我不知道它是否正确,对我来说看起来很奇怪。

问题:

如果以前使用 Typescript 2.3.4 工作正常,现在我不明白为什么它不能?,如果我已经在方法的开头指定了期望哪个返回,为什么我必须强制返回?基本上是重复代码:

0 投票
1 回答
114 浏览

typescript - 限制方法中的接口类型参数

我试图传达一个方法只有在其接口的类型参数符合某个约束时才有意义。这是一个(非编译)示例:

在这里,我试图传达sum只有在T extends number.

0 投票
1 回答
45 浏览

typescript - TS 通用“字符串”语法的文档

此语法按预期编译和工作:

但它需要强制转换为 KeyboardEvent。

我注意到当我悬停 addEventListener 方法时,提示说

我真的更喜欢不需要强制转换的强类型签名,但我花了一段时间为这种语法查找文档。

试图猜测,我注意到Window.addEventListener<"keypress">(语法并没有扰乱我的编译器,但我无法弄清楚它想要定义侦听器的 lambda 表达式。

任何人都可以用一个例子来解释它或提供正确的搜索词吗?

令我困惑的一件事是如何控制事件是否被消费。EventListener 的定义是

根据 Basarat 的回答,我试图指定一个更强的签名,但这与 EventListener 接口不兼容,这就是我查看上面已经发布的定义的原因。

Basarat 提出了完全相同的方法这一事实让我感到鼓舞,我尝试了这个

这不再让编译器感到不安,但这并不是对演员表的巨大改进。