我有一个nosql数据库,在该数据库中我知道文档的架构。在我的React应用中,我有一个略有不同的架构。我想在打字稿中定义两个接口,以及从一个接口转换为另一个接口。
以下代码可以正常工作
interface backendPersons {
[id: string]: {
name: string;
hairColor: string;
};
}
interface appPersons {
[id: string]: {
id: string;
name: string;
hairColor: string;
};
}
type Transformer<fromType, toType> = (data: fromType) => toType;
const personsTransformer: Transformer<backendPersons, appPersons> = data => {
let res: appPersons = {};
for (let k of Object.keys(data)) {
res[k] = {...data[k], id: k}
}
return res
};
const backendPerson = {
'john': {
name: 'John Doe',
hairColor: 'black'
}
}
const appPerson = personsTransformer(backendPerson);
但是可以说我想拥有更通用的转换器功能,因为我必须对一堆接口进行相同的转换。我有以下内容,但不起作用( TS2322 和 TS7053 )
const transformer = <fromType, toType>(data: fromType): Transformer<fromType, toType> => {
let res: toType = {};
for (let k of Object.keys(data)) {
res[k] = {...data[k], id: k}
}
return res
}
const appPersons = transformer<backendPersons, appPersons>(backendPerson);
实际上,我想扩展功能,以便内部转换不仅是{...data[k], id: k}
,还可以是给定的data
和k
作为可选参数的任何转换。 transformer
呼叫。