如何在TypeScript中使用类型推断

时间:2017-09-08 11:51:05

标签: typescript generics type-inference

我有这个函数有几个签名重载。

// 1: overwrite
function extend<T>(d: T, ...s: Partial<T>[]): T;

// 2: shallow copy & overwrite
function extend<T>(o: {}, d: T, ...s: Partial<T>[]): T;

// 3: overwrite & extend
function extend<T, S extends T>(d: T, ...s: Partial<S>[]): Partial<S>;

// 4: shallow copy & overwrite & extend
function extend<T, S extends T>(o: {}, d: T, ...s: Partial<S>[]): Partial<S>;

// implementation
function extend(d: any, ...s: any[]): any {
    for (let src of s) {
        for (let prop in src) {
            if (src.hasOwnProperty(prop)) {
                d[prop] = src[prop];
            }
        }
    }
    return d;
}

为了使开发更容易,我希望通过类型推断来完成所有这些代码的完成。

签名1一个完美无瑕。支持类型推断,当我开始键入s个对象的属性时,我得到代码完成。

我也理解签名3和4不可能进行类型推断,因为S类型无法从任何地方推断,特别是因为参数类型为Partial<S>

但我不确定签名2 。似乎应该可以基于第二个参数推断S的类型,除非我明确提供泛型类型参数,否则不是这种情况。

问题

如何同时完成1和2的类型推断(和代码完成)?或者为什么它不可能?我看到的部分问题是我不知道如何为空对象文字制作类型别名。因为我认为这将是签名2的解决方案。

0 个答案:

没有答案