如何解决如何让第二个参数被第一个限制?
考虑以下事项:
我有一个 AbstractTaskProcessor
,如下所示:
export abstract class AbstractTaskProcessor<T> {
abstract process(args: T): Promise<void>
}
示例实现
interface AccountScoringJobInput {
accountName: string,accountId: string
}
class ScoringTaskProcessor extends AbstractTaskProcessor<AccountScoringJobInput> {
process(args: AccountScoringJobInput) { // do some work}
}
现在我想创建一个通用的 processTask 函数,我想像这样调用它:
processTask(ScoringTaskProcessor,{accountName: 'lala',accountId: '123'})
要做到这一点的类型是什么,使得第一个参数是 AbstractTaskProcessor
的实现,第二个参数是由其定义定义的参数?
解决方法
试试这个 processTask
函数的签名:
function processTask<T>(process: abstract new () => AbstractTaskProcessor<T>,args: T)
警告:这只适用于 TypeScript 4.2 或更高版本。
,所以@blaumesise - 非常接近并且为我指明了正确的方向。
但是我在抽象关键字上挣扎。所以以下是诀窍,我认为它感觉很好
添加了以下实用程序类型:
export type Constructable<T> = new (...args: any[]) => T
然后它工作得非常好:
function processTask<T>(processor: Constructable<AbstractTaskProcessor<T>>,args: T)
用这个打字稿来接近光明!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。