复现
Command 字段会遮蔽上层 option Provider 的同名字段,但没有显式确认:
src/app.module.ts
import { Command, Flag, Handler, Module, Option, createApp } from 'func'
@Option()
class AppOptions {
@Flag()
verbose = false
}
@Command('build')
class BuildCommand {
@Flag()
verbose = false
@Handler()
run() {}
}
@Module({ commands: [BuildCommand], options: [AppOptions] })
class AppModule {}
createApp(AppModule)如何修复
普通重复声明应重命名或删除。确实需要由 Command 或 feature @Option() 字段替换上层字段时,在该字段上同时使用 @Override();替换根模块的 @OptionCommand 时,在 feature action 上设置 overrideAll: true。
覆盖只改变公开 token 的绑定目标,不会把用户值同时写入被遮蔽的上层字段。