TypeScript-如何推断接口通用参数

问题描述

我正在寻找一种解决方案,以使接口根据代码时给出的内容推断出通用参数,而不必指定它(因为在我的用例中,无法指定它)。

这就是我想做的

interface Field<T> {
    value: T;
    onChange: (value: T) => void;
}

interface Options {
    fields: {
        [key: string]: Field; // Requires a type argument...
    };
}

const options: Options = {
    fields: {
        name: {
            value: "John",onChange: (value) => { /* ... */ },// type of "value" should be string
        },age: {
            value: 2,// type of "value" should be number
        },other: {
            value: { sex: "male",money: 1337 },// type of "value" should be { sex: string,money: number }
        },}
};

在此示例中(无效),Options.fields将是Field的集合,这些值的类型直到被写入才被知道。但是,由于Field一个<T>参数,因此必须在Options.fields中指定它才能传递类型。但是这种类型可以是任何东西。我希望从onChange的类型中推断出value的类型。

这似乎适用于功能

function fn<T>(param: T) {
    return param;
}
const test = fn(2); // type of test: number (2)

在此示例中,我能够使用不需要指定类型实参的函数,而无需指定它,因为它是从我传入的参数中推断出来的。我也希望接口具有这种行为。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)