我希望能够像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'.
}
有什么办法解决吗?
答案 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
需要a
和b
的值,但是Partial<Foo>
允许两者都省略。
此处的“解决方案”是实现从Partial<T>
到完整T
的所有属性的实现方式。
我不知道您的数据是什么样的,但是可能是这样的:
public do(wholeData: T, newData: Partial<T>): void {
thirdParty.process({ ...wholeData, ...newData });
}