在打字稿泛型中使用通配符[重复]

问题描述 投票:0回答:1

此问题已经在这里有了答案:

这可能是一个简单的解决方案,但我还没有遇到。给定像func<T, D = any>(param1: T, param2: D) { ... }这样的打字稿功能,我用两个参数param1param2来调用它。是否可以在不指定D类型的情况下指定T的类型,以便打字稿仍可以推断T的类型,但可以强制执行D的类型?

示例:假设我要强制使用外部接口定义的类型来调用此函数:

export interface Data {
  field1: string;
  field2: boolean;
}

我现在可以使用func('Hello', {field1: 'World', field2: true})(这不能确保param2是有效的Data对象),也可以使用func<string, Data>('Hello', {field1: 'World', field2: true})。我不想要做的是func<any, Data>('Hello', {field1: 'World', field2: true})。有解决方案吗?

typescript generics type-inference
1个回答
3
投票

这称为部分参数推断,目前尚不支持。有一个建议添加此内容,但据我所知,尚未积极研究。

您可以使用currying函数来实现此目的,尽管结果并不那么漂亮:

function func<T>(param1: T) {
  return function <D>(param2: D) {
    return [param1, param2]
  }
}  

export interface Data {
  field1: string;
  field2: boolean;
}
let a = func("Hi")<Data>({
  field1: "",
  field2: true
})


let b = func("Hi")<Data>({
  field1: 1, // err
  field2: true
})

Play

© www.soinside.com 2019 - 2024. All rights reserved.