typescript - Typescript 中的通用基础对象
问题描述
我们如何在 Typescript 中创建一个通用的基础对象,以便我们可以为对象分配任何额外的键值?
使用以下代码,我收到此错误
Type 'HandlerParams' is missing the following properties from type \
'{knownKey: string, unknownKey1: string, unknownKey2: string;}': \
unknownKey1, unknownKey2
interface HandlerParams {
knownKey: string;
[key: string]: any
}
type Handler = (args: HandlerParams) => any
function errorHandler(handler: Handler) {
return ({logger, ...params}: HandlerParams) => {
return handler({logger, ...params})
}
}
errorHandler(({knownKey, unknownKey1, unknownKey2}: {knownKey: string; unknownKey1: string; unknownKey2: string}) => {
//...
})
解决方案
我使用泛型更改了您的代码:
interface HandlerParams {
knownKey: string;
logger?: any;
}
type Handler<T extends HandlerParams> = (args: T) => any;
function errorHandler<T extends HandlerParams>(handler: Handler<T>) {
return (params: T) => {
return handler(params);
};
}
interface UnknownKeys extends HandlerParams {
knownKey: string;
unknownKey1: string;
unknownKey2: string;
}
errorHandler(({ knownKey, unknownKey1, unknownKey2 }: UnknownKeys) => {
//...
});
您可以在此处阅读有关泛型的信息:官方文档
推荐阅读
- python - 如何告诉 Web 浏览器打开 - 套接字,我将发送多少字节给它
- javascript - 对象内的地图具有相同索引的问题
- python - 如何在epicbox中提供超过1个输入参数
- typescript - 使用 TypeORM 重命名主键时出现 QueryFailedError
- python - 熊猫读取xml的奇怪不匹配标签错误
- mysql - 给定关系模式在 SQL 中提供查询
- react-native - 使用 React Native EXPO 分享到 Instagram 提要
- python - 如何从此元组中删除引号?我怎样才能使列表同质化
- arrays - Slurm 阵列采用双倍 CPU 比请求
- javascript - AWS Amplify 登录错误 - 登录错误... [TypeError: (0, _getRandomBase.default) 不是函数