类型“ Partial <T>”的参数不能分配给类型“ T”的参数

时间:2020-07-16 23:04:04

标签: typescript

我希望能够像do({prop: 'value'});这样调用我的函数,所以我有以下签名:

  public do(data: Partial<T>): void {
    thirdParty.process(T); //<-- Argument of type 'Partial<T>' is not assignable to parameter of type 'T'.
  }

有什么办法解决吗?

1 个答案:

答案 0 :(得分:3)

“部分”类型的参数无法分配给“ T”类型的参数。

这是正确的,并且正在识别错误​​。

以更简单的情况进行说明:

interface Foo { a: number, b: number }

const wholeFoo: Foo = { a: 1, b: 2 } // Works
const partialFoo: Partial<Foo> = { a: 1 } // Works

const anotherWholeFoo: Foo = partialFoo
// error: a & b could be undefined but both are required

此示例失败,因为Foo需要ab的值,但是Partial<Foo>允许两者都省略。

此处的“解决方案”是实现从Partial<T>到完整T的所有属性的实现方式。

我不知道您的数据是什么样的,但是可能是这样的:

public do(wholeData: T, newData: Partial<T>): void {
  thirdParty.process({ ...wholeData, ...newData });
}