如何扩展WorkspaceJsonConfiguration的子接口ProjectConfiguration并新增字段
解决方案
你可以根据自己的使用场景选择以下两种实现方式:
方式一:局部自定义扩展类型(不会污染全局类型,推荐大多数场景使用)
你已经完成了ProjectConfiguration的扩展,只需要再对WorkspaceJsonConfiguration做扩展,替换其内部projects属性的类型即可:
import { WorkspaceJsonConfiguration, ProjectConfiguration } from '@nrwl/devkit' // 扩展基础项目配置 interface ProjectConfig extends ProjectConfiguration { version: string date: string } // 扩展工作区配置,替换projects属性的类型 interface ExtendedWorkspaceConfig extends WorkspaceJsonConfiguration { projects: { [projectName: string]: ProjectConfig } }
后续在你的代码中,所有用到工作区配置的位置,将类型声明替换为ExtendedWorkspaceConfig即可,此时读取projects下的任意项目配置,都会自动获得version、date两个新增字段的类型提示。
方式二:全局扩充原模块类型(全项目生效,适合统一修改所有场景的类型定义)
如果你希望整个项目内所有导入@nrwl/devkit的位置,默认就带有你新增的两个字段,可以用TypeScript的模块扩充能力实现:
// 该段代码可以放在当前文件顶部,或者项目全局的*.d.ts声明文件中 declare module '@nrwl/devkit' { interface ProjectConfiguration { version: string date: string } } // 后续直接导入原类型即可,无需额外自定义扩展接口 import { WorkspaceJsonConfiguration, ProjectConfiguration } from '@nrwl/devkit' // 直接使用原WorkspaceJsonConfiguration类型,内部projects的项目配置已自动扩展两个字段 const workspaceConfig: WorkspaceJsonConfiguration = /* 你的工作区配置内容 */
内容的提问来源于stack exchange,提问作者user3142695
相关产品推荐
相关产品推荐

