语法错误:找不到名称“ setImmediate”

时间:2019-02-21 11:05:51

标签: node.js typescript .net-core

在.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软件包并导入它,但是那也不起作用。有人知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

非Webpack:

在文件开头安装npm install --save-dev @types/node,然后导入import '@types/node';,为我解决了此问题。


Webpack:

如果您使用的是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(并按照其余说明进行操作),即可正常使用:)