typescript中是可以定义一个对象的key是否可以固定前缀后缀和取消固定前缀后缀,如果有代码洁癖和对象key是通过一段逻辑批量赋值的话这个技巧很有用
实际应用可以看我的下一篇文章,毕竟没有用的知识点如同废物
比如我在node中使用typeorm,自动根据一个固定的名称实例化repo,key就可以这样写:
type RepoEntityMapType = {
[K in keyof typeof RepoEntityMap as `${K}Repo`]?: Repository<InstanceType<typeof RepoEntityMap[K]>>;
};
再比如我的实体都以Entity结尾,但是我根据自动生成的实例需要将Entity给去掉,那么我就可以:
type RepoEntityMapType = {
[K in keyof typeof RepoEntityMap as K extends `${infer Prefix}Entity` ? Prefix : K]: Repository<InstanceType<typeof RepoEntityMap[K]>>;
};