В моем angular проекте у меня есть следующий код:
// one module
@NgModule({
...
})
export class SecondModule {
public static forRoot(
SecondConfig: Config
): ModuleWithProviders<SecondModule> {
return DIYModuleWithProviders(SecondModule, SecondConfig);
}
...
}
// fuction from another module
export function DIYModuleWithProviders(
module: any,
config: Config
): ModuleWithProviders {
return {
ngModule: module,
providers: [
{
...
},
{
...
}
]
};
}
В Angualr 8 это работает очень хорошо. Но после обновления до Angular 9, поскольку ModuleWithProviders
должен иметь тип generi c. Поэтому мне нужно изменить этот код следующим образом:
// one module
@NgModule({
...
})
export class SecondModule {
public static forRoot(
SecondConfig: Config
): ModuleWithProviders<SecondModule> {
return DIYModuleWithProviders<SecondModule>(SecondModule, SecondConfig); // yes, some wrong here
}
...
}
// fuction from another module
export function DIYModuleWithProviders<T>(
module: T,
config: Config
): ModuleWithProviders<T> {
return {
ngModule: module,
providers: [
{
...
},
{
...
}
]
};
}
в комментарии выше кода, вы можете найти проблему DIYModuleWithProviders<SecondModule>(SecondModule, SecondConfig)
, ранее SecondModule передавался как значение аргумента, но теперь он используется как тип Сначала аргумент, поэтому приведенный выше код не может работать. Ошибка машинописи:
Type 'T' is not assignable to type 'Type<T>'.
Как решить эту проблему?