Typescript 为道具使用联合类型值时,类型保护失败

Typescript 为道具使用联合类型值时,类型保护失败,typescript,Typescript,我有以下代码片段: 接口插件OK{ onStoreCreated?:(p1:编号)=>无效; onModel?:(p2:string)=>void; } 接口MyPlugin扩展了PluginHook{ 配置?:记录; } 接口包{ forEachPlugin:( 方法:钩子, fn:(内容:不可为空)=>无效 )=>无效 } 类型方法=插件的键; 函数fn(p:不可为空){} 常量插件:MyPlugin[]=[]; 警察包:包={ forEachPlugin(方法,fn):void{ for(

我有以下代码片段:

接口插件OK{
onStoreCreated?:(p1:编号)=>无效;
onModel?:(p2:string)=>void;
}
接口MyPlugin扩展了PluginHook{
配置?:记录;
}
接口包{
forEachPlugin:(
方法:钩子,
fn:(内容:不可为空)=>无效
)=>无效
}
类型方法=插件的键;
函数fn(p:不可为空){}
常量插件:MyPlugin[]=[];
警察包:包={
forEachPlugin(方法,fn):void{
for(插件的常量插件){
//const mmthod:keyof PluginHook='onStoreCreated';
const hook=plugin[method]
如果(钩子){
fn(吊钩)
}
}
},
}
forEachPlugin
中,
hook
的类型保护似乎无法工作。钩子仍然未定义,因此我无法将其传递给不可为null的值

我以前编写过类似的代码,并在上打开了一个问题

/。。。
警察包:包={
forEachPlugin(方法,fn):void{
for(插件的常量插件){
if(插件[方法]){
fn(插件[方法])
}
}
},
}
但他们说,如果我改成这样,就不是一个bug:

const bag:bag={
forEachPlugin(方法,fn):void{
for(插件的常量插件){
const hook=plugin[method]
如果(钩子){
fn(吊钩)
}
}
},
}
它在某些情况下有效,但在我的情况下也失败了。我认为这也是一个错误。如果没有,是否有解决方法?完整的代码


提前谢谢

使用
consthook=plugin[method]??未定义有效,但我不知道为什么会失败!!!它就像一个符咒。但我也想知道为什么。