2017-08-24 96 views

回答

1

importexport有限制语法,允许静态分析他们:

正如the documentation上市:

进口defaultMember从“模块名称“;

导入*为“module-name”的名称;

从“module-name”导入{member};

从“module-name”导入{member as alias};

从“module-name”导入{member1,member2};

从“module-name”导入{member1,member2 as alias2,[...]};

从“module-name”导入defaultMember,{member [,[...]]};

import defaultMember,*作为来自“module-name”的名称;

import“module-name”;

可以看出,没有import * as name, { member } from "module-name",所以不支持。

它不被支持的原因是因为import * as name, { member } from "module-name"是可以互换的。它要么逐个导入成员,要么作为name命名空间。

如果双方应该用于某些原因,它应该是:

import * as Express from 'express'; 
import { Application, NextFunction, Request, Response } from 'express'; 

或者,如果出口是真正的变量,而不是类型/接口,它可以是:

import * as Express from 'express'; 
const { Application, NextFunction, Request, Response } = Express; 
+0

嗨,谢谢你的详细解答,我一定会仔细看看提到的文档。 不幸的是,最后一个构造与const(我已经尝试过),但会更合乎逻辑 –

+0

我补充说明。我认为这是因为它们是界面而不是真正的类,不是吗?所以不,const解构是没有意义的,因为没有什么可以解构的。在这种情况下,第一个选项是正确的,顺便说一句,不要单独导入接口是非常传统的,因为'foo:Express.NextFunction'读取更干净,这样接口就不会与类混淆,即使它们不'没有'I'后缀。 – estus

+0

是的,他们都是接口:) –