问题标签 [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.
javascript - T 型锯齿数组的类型定义及其数组原型扩展
我正在尝试为我附加到的 JavaScript 函数编写一个 Typescript 定义文件Array.prototype
。
数组.js
flat()
适用于Array<T|S>
where S
isArray<T|S>
和 return Array<T>
。也就是说,它有一个递归定义,并且所有数组都符合该定义,因为[1, 2, 3].flat()
它将简单地返回原始数组的副本。
我是 TypeScript 的新手,但我的理解是,为了获得 TypeScript 定义文件(即 IntelliSense)的好处,方法定义必须在interface Array<T>
. 如果是这种情况,有没有办法对T
特殊版本的Array<T>
?
如果不是,我如何定义一个接口,该接口将为每个数组拾取并识别数组何时适合递归定义?
typescript - 避免在开关内进行打字稿转换
考虑以下代码:
现在,我想避免在 doSomthingBasedOnType 中看到的强制转换(作为 FooBarAction<"FOO"> 的操作),因为如果接口使其成为此开关内的唯一可能性,则作为定义。我可以在我的代码中更改某些内容以使其正常工作,还是这只是 TypeScript 中的错误?
typescript - 打字稿通用承诺返回类型
基本上我正在尝试实现一个函数,该函数始终返回我作为参数传递给函数的相同“类型”的已实现承诺
因此,如果我用布尔值调用它会返回一个已完成的 Promise,如果我用一个字符串参数调用它会返回一个已完成的 Promise,依此类推..
到目前为止我尝试了什么:
我不知道这是否是正确的方法,无论如何,如果我尝试获得 Promise< void > 它会中断
任何建议将不胜感激
typescript - Generics for Typesafe-Actions library
So I am using this library https://github.com/piotrwitek/typesafe-actions. It has a method createAction with the following API.
Now if i do
It simply fails. It infers type as payloadType<someType>
instead of payloadType<T extends someType>
.
Am I the only one having this issue. As a workaround i did implement a getter function but seems like a hack.
Any help on the same would be highly appreciated.
typescript - 如何要求参数是严格扩展部分的泛型
我试图达到说明一些通用 P 是 O 的一部分的直观结果。
但是,这允许键不是 O 的 P
这也不起作用
这个版本有效
但是返回类型不能是泛型 P。
是否存在将 P 限制为 O 中的键并满足通用要求的解决方案?
- 更新
对于任何感兴趣的人,我已经发布了一些有用的部分类型的要点,这些部分类型不允许多余的属性
https://gist.github.com/babakness/a1ca775f81097ffae04098a8cfdadc60
javascript - 在 TypeScript 中返回泛型类型的构造函数
我正在努力定义如何编写 TypeScipt 代码,该代码表示该函数返回泛型类型的构造函数。有很多关于如何传递泛型类型的构造函数的例子,但没有关于如何返回的例子。
请检查以下示例:
这是抽象类的一部分:
在派生类中,我试图像这样实现它:
我有以下错误:
如果我知道如何在抽象类中指定,我可以跳过派生类中的实现。
所以问题是 - 如何在抽象类级别指定该方法返回泛型类型的构造函数,并且我可以在子级别类中跳过此方法的实现?或者我在抽象类级别上没有正确指定返回签名?
编辑:
请检查奇怪的问题。A 类和 B 类的区别仅在于显式构造函数的存在。在 RealA 中不起作用,RealB 使用相同的 getModel() 方法。
对于 RealA 类同样的错误
typescript - 带有通用参数列表的打字稿类型参数
是否可以像在 C++ 中一样将类型参数用作泛型?
有趣的部分是T<T2>因为打字稿编译器生成一个错误说: Type 'T' is not a generic
typescript - 递归泛型类型来扩展类型 - 奇怪的行为,这是一个错误吗?
给定一个接口
和一堂课
我希望能够这样做:
我试图通过声明以下类型来实现:
然后DeepContextual
用于转换我的Test
界面:
这工作正常。
现在,让我们向我们的ContextualData
类添加另一个方法:
即使不使用新函数,我们的 Contextual 接口value: ContextualData<boolean>(true)
现在也会抛出以下 TS 错误:
我错过了什么?这是一个错误吗?
reactjs - 在 TypeScript 中将 onChange 值设为没有类型断言的泛型类型
我已经创建了一个带有选项元素的通用反应组件,如下所示: import * as React from "react";
我正在使用这样的:
有什么方法可以避免在 changeHandler.
event.currentTarget.value as OptionValues
. 我还看到整个 createSelect 突然变得非常冗长,到处都引用了 OptionValues,但我想没有办法解决它。解决问题的替代方法也受到欢迎。那就是确保价值是预先确定的类型。
typescript - 在定义中,仅当泛型类型是数组时,我才需要特定的方法签名
这是 Knockout's 定义的稍微简化的版本subscribable
:
问题是arrayChange
事件回调的定义是错误的。首先,该arrayChange
事件应该只适用于T
一个数组,比如X[]
. 然后,ArrayChange
接口使用的值需要是X
type 而不是X[]
。
仅当是数组并且能够提取基础类型时,我如何才能包含arrayChange
事件签名?T