3

我遇到了一个奇怪的 Typescript 分配错误,我试图更多地了解它为什么不起作用。作为参考,我正在使用 TS 3.9.2

编码:

function test<U extends object>(a: U, k: keyof U) {
    const x: Partial<U> = { [k]: a[k] };
    // ...
}

错误:

Type '{ [x: string]: U[keyof U]; }' is not assignable to type 'Partial<U>'.

只有当我使用泛型时才会出现问题,例如,如果U我不使用具体接口,那么它会按预期工作。

我假设类型系统在U分配期间无法正确推断和使用它们的键,这是为什么呢?我检查了它k内部{ [k]: a[k] }正确返回的类型,keyof U所以我不完全理解为什么类型系统不能使用该信息来检查分配是否合法并概括kstring.

谢谢你。

4

1 回答 1

0

我认为,唯一的原因是它不起作用,打字稿不能完全理解你的意图,因为你创建了一个新对象并且没有关于它的信息。

在这种情况下,最好告诉编译器,现在你有像这样的原始对象的部分

function test<U>(a: U, k: keyof U) {
    const x: Partial<U> = { [k]: a[k] } as Partial<U>;

    return x;
}

它会起作用

于 2020-07-31T23:32:44.523 回答