【问题标题】:TypeScript Generics: infer key of key-value return type from function argumentTypeScript 泛型:从函数参数推断键值返回类型的键
【发布时间】:2019-01-07 03:04:38
【问题描述】:

我必须遵循以下功能:

function x<V = string, K extends string = string>(myKey: K): {[k in K]: V} {
  return null as any;
}

我想去掉(或省略)K extends string = string 部分。

目前我不得不这样称呼它:

const res = x<number, 'foo'>('foo');   // resulting type: { foo: number }

但我不想输入两次foo。我只是想这样使用它:

const res = x<number>('foo');

虽然理想情况下我想这样输入函数:

function x<V = string>(myKey: string): {[myKey]: V} {
  return null as any;
}

这有可能吗?

【问题讨论】:

    标签: typescript generics typescript-generics


    【解决方案1】:

    在 3.1 中可以使用 Named type arguments & partial type argument inference 推断一些类型参数。

    在此之前,您可以让函数返回另一个函数,第一个调用指定第一个类型参数,第二个调用推断其余的

    function x<V = string>() {
        return function <K extends string = string>(myKey: K): { [k in K]: V } {
            return null as any;
        }
    }
    
    x<string>()('foo')
    

    【讨论】:

    • 谢谢!你能否展示一下它在 TypeScript 3.1 中的样子?我在链接的 GitHub 问题中找不到匹配的示例。
    • 我认为这是因为新功能的语法尚未最终确定。一个重要的突出问题是泛型定义如何选择接受命名类型参数,因为这使得类型参数名称成为 API 的一部分。
    • @BenjaminM 我们还在等待 3.0,我认为 3.1 的东西还没有准备好,可能还会有很多变化,这就是为什么我什至没有尝试寻找一个使用示例,值得期待,值得为未来的读者提及
    猜你喜欢
    • 2020-01-23
    • 2016-11-01
    • 1970-01-01
    • 2020-03-11
    • 2016-12-05
    • 2020-03-12
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    相关资源
    最近更新 更多