问题标签 [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.
typescript - 泛型中 [typof T] 的原因与硬编码类型具有不同的语义?
所以我在 typescript 中发现了一个技巧,通过将类型映射到键值对然后使用该keyof
类型创建一个可以是映射中任何值的类型,将对象类型转换为可区分的联合。这是一个简单的例子:
如果您想指定一个非常大的可区分联合,这非常有用,但是当您尝试使此构造完全通用时,您最终会得到不同的类型。
这应该是相同的类型,但由于某种原因它不是。我试图查看打字稿文档以找到这种行为的一些原因,但我不能。有谁知道这种差异背后的原因?或者更好的是,有没有人知道一种解决这种行为并使其完全通用的方法?
typescript - typescript :具有原始类型约束的泛型类型
我在打字稿中有以下通用类
但我不知道为什么会出现此错误类“(匿名类)”错误地扩展了基类“列”。属性“getValue”的类型不兼容。类型 '(value: number) => number' 不可分配给类型 '(value: number) => S'。类型“数字”不可分配给类型“S”
angular - 如何在 Angular4 中提供使用泛型的服务?
我注意到我的项目有很多解析器服务,尽管它们使用不同的实体和存储库托管相同的代码。所以我接受了挑战,使用泛型将它们简化为单个解析器服务:
可以指定实体类型 T 和存储库类型 R。但是我无法使用此服务:
一旦我在DetailResolver<Message, MessageService>
编译器中指定泛型类型,我就希望我创建一个实例:
typeof DetailResolver 类型的值不可调用。你的意思是包括新的?
我不太熟悉 angular4 DI 内部。任何人都可以描述什么是错的,这个问题有什么解决方案吗?我正在使用角度 4.3。
angular - 声明一个具有泛型类型的组件
是否可以在 Angular 4 中声明具有泛型类型的组件?
以下代码会导致构建错误:
执行时的错误ng serve
是:
例子:
以下示例尝试实现一个通用数据表,其中@Input() data
从一个“调用此组件”的组件更改为另一个。问题是可以BehaviorSubject<any[]>
更改为传递给组件的泛型类型在哪里BehaviorSubject<T[]>
?T
typescript - 如何从超类方法返回子类型而不是超类类型
我认为这是正确实现泛型的问题,但我不确定。
我在这里创建了一个代表问题的 Github 要点: https ://gist.github.com/ORESoftware/66b72b4b85262d957cb03ad097e4743e
假设我有这个超类:
和几个子类,例如一个看起来像这样:
所以如果我这样做
new B().foo().bar()
这将在运行时工作,但不能使用 TypeScript 编译。那是因为foo()
将返回类型声明为A
,而不是 type B
。
我怎样才能返回类型this
,而不是声明foo()
总是返回类型A
?
我试过这个:
但我收到此错误:
typescript - 从映射解析并间接调用的函数的类型推断
我正在尝试使打字稿打字与一种模式一起工作,其中有一个函数对象和一个函数,该函数在对象中call(name, arg)
查找函数并使用.name
arg
假设我有一个将名称映射到函数的对象:
我还有一个函数call(name, p)
,它从 中解析函数REGISTRY
并用p
. 现在,我想输入函数,如果提供了无效参数,它会抱怨:
如何从 的类型中解析P
参数的类型p
(以及返回类型R
)Registry.str2numb
?甚至可能吗?
我已经做到了这一点,但它不起作用:
但是,这有效:
typescript - 从接口扩展 Typescript 类
如何使用 Typescript 中的接口属性扩展类?我意识到这必然会使属性未初始化。
我的唯一目的是减少代码冗余。出现在接口中的属性声明将相同地出现在每个类实现中。我宁愿只从界面集中维护这些属性。
我想写如下内容,但这是充满错误的谜语:
相反,我发现自己能够编写这个,它可以构建但不能完成工作:
很明显,当我添加implements Spec
到 MyModel 时它不起作用:
因为那时我得到了错误,Property 'id' is missing in type 'MyModel'
.
我不担心让接口属性未初始化,因为这总是可以从构造函数中完成。我正在处理的过多接口是更大的噩梦。
注意:我使用底层 JS 模块来填充规范属性,因此如果没有提供它们的声明,编译器不一定会抱怨。
typescript - 将泛型类型限制为 Typescript 中的几个类之一
在 Typescript 中,如何在编译时将泛型类型限制为多个类之一?例如,你如何实现这个伪代码?
此外,我希望能够将属性(或任何变量)分配给泛型类型选项之一的特定后代类型,而不仅仅是给定类型之一。例如:
这个答案显然并不明显,因为我花了几个小时。在我看来,这个问题的某种形式已经被问过了,但给出的解决方案甚至不适合我。可能是仅在非常特定的背景下才回答了先前的问题,因为赞成票的数量表明它正在解决某些人的问题。
我发布这个新问题是为了清楚地说明一般问题并跟进解决方案。
typescript - 使用泛型指定返回值的类型
我在 Angular 服务上有这个方法:
请注意,这LastErrorType
是
这就是问题所在,有时我传递一个键,我知道“返回”类型将是一个数组,例如:
但如果我这样做:
tsc 会抱怨并说返回类型不可分配给Promise<Array<any>>
.
如何使用泛型,以便getFromSyncStorage
可以正确键入此通用方法?