在.netcore应用程序中,我将Typescript版本从2.4.1
升级到3.2.4
,现在在编译时收到错误Cannot find name 'setImmediate'
。我下面的实现基本上是直接来自Microsoft guide的预渲染。
export default createServerRenderer(params => {
const providers = [
{ provide: INITIAL_CONFIG, useValue: { document: '<app></app>', url: params.url } },
{ provide: APP_BASE_HREF, useValue: params.baseUrl },
{ provide: 'BASE_URL', useValue: params.origin + params.baseUrl },
];
return platformDynamicServer(providers).bootstrapModule(AppModule).then(moduleRef => {
const appRef: ApplicationRef = moduleRef.injector.get(ApplicationRef);
const state = moduleRef.injector.get(PlatformState);
const zone = moduleRef.injector.get(NgZone);
return new Promise<RenderResult>((resolve, reject) => {
zone.onError.subscribe((errorInfo: any) => reject(errorInfo));
appRef.isStable.pipe(first(isStable => isStable)).subscribe(() => {
setImmediate(() => { // <!-- error here
resolve({
html: state.renderToString(),
globals: {
}
});
moduleRef.destroy();
});
});
});
});
});
我看到那里was a bug raised for this,但是它被标记为已解决并合并。我也尝试安装setImmediate
软件包并导入它,但是那也不起作用。有人知道如何解决这个问题吗?
答案 0 :(得分:1)
非Webpack:
在文件开头安装npm install --save-dev @types/node
,然后导入import '@types/node';
,为我解决了此问题。
如果您使用的是webpack,则此操作将无效。取而代之的是npm install --save-dev @types/node node
,您将必须:
进入您的.tsconfig
并添加'node'
:
{
"compilerOptions": {
"types": [..., "node" ],
...
}
}
请勿import '@types/node';
,这是出于here所述的原因:
@types
软件包存储在@types
目录中,但是绝对不能手动导入。而是,您需要从安装依赖项的位置导入它们所对应的依赖项。@types
程序包为依赖项提供了类型声明,而其他方式则没有提供它们。
答案 1 :(得分:0)
我刚刚使用webpack尝试了该解决方案,但我注意到不需要npm安装节点,只需安装@ types / node(并按照其余说明进行操作),即可正常使用:)>