如何解析- type的参数不能赋值给type - TYPESCRIPT



我有一个函数,它接受一个函数对象:

type ForMembers<S> = {
[Key: string]: (arg: S) => void;
};
export default function transform<S extends { [index: string]: any }, D extends { [index: string]: any }>(
source: S,
interfaceName: string,
forMembers?: ForMembers<S>
): D {
const newObj = extract(source, getKeys(interfaceName));
if (forMembers) {
Object.keys(forMembers).forEach((key) => forMembers[key](newObj));
}
return newObj as unknown as D;
}

这个想法是,我可以传递我想要的任何函数对象,但typescript出于某种原因要求我传递类型上存在的所有属性,否则它会抛出一个错误

例如D是

interface Destination {
name: string;
bio: string;
names: string[];
profession: {
field: string;
level: string;
};

我将函数调用为:

transform<Source, Destination>(sourceData, "Destination", {
name: () => {},
bio: () => {},
profession: () => {},
});
}

会抛出错误:

类型为'{name: () =>无效;生物:()=>无效;职业:()=>无效;}'不能赋值给' formmembers <Destination,>'类型的形参。属性'names'在类型'{name: () =>无效;生物:()=>无效;职业:()=>无效;}',但需要在类型' formmembers <Destination,>'中使用。

如果我添加缺失的属性- '名称',错误消失,但我想只传递我需要的属性,而不是全部。问题是,如何使这个函数包含D的任意属性组合,而不是全部?

您可以使用Partial:

告诉TS对象的所有属性都是可选的。
forMembers?: Partial<ForMembers<S>>

最新更新