打字稿:部分<this>作为参数类型不起作用

时间:2017-12-05 15:20:13

标签: typescript

我正在尝试编译以下代码,但它在C.inc方法中失败并显示消息:

error TS2345: Argument of type '{ counter: number; }' is not assignable to parameter of type 'Partial<this>'.

守则无法编译:

class B {
    clone(diff: Partial<this>): this {
        return this; // omit the implementation.
    }
}

class C extends B {
    counter = 0;
    inc() {
        return this.clone({
            counter: this.counter + 1
        })
    }
}

但是下面的代码可以编译(没有C.inc方法):

let c = new C();
c.clone({ counter: c.counter + 1 });

我想知道原因。

1 个答案:

答案 0 :(得分:3)

我不知道为什么Partial<this>无效,但Pick works

class B {
    clone<K extends keyof this>(diff: Pick<this, K>): this {
        return this; // omit the implementation.
    }
}

class C extends B {
    counter = 0;
    inc() {
        return this.clone({
            counter: this.counter + 1
        })
    }
}

我很想知道原因!