首页 > 解决方案 > 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}) => {
    //...
})

标签: typescript

解决方案


我使用泛型更改了您的代码:

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) => {
  //...
});

您可以在此处阅读有关泛型的信息:官方文档


推荐阅读