【问题标题】:ES6/Typescript import: import * and names on a single lineES6/Typescript 导入:在一行中导入 * 和名称
【发布时间】:2018-02-02 16:28:48
【问题描述】:

我怎样才能把这个写在 1 行上?

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

你的开发者丹

【问题讨论】:

  • *express 导入所有内容。不明白需要单独导入其他模块

标签: typescript import ecmascript-6


【解决方案1】:

importexport 具有允许静态分析它们的受限语法:

the documentation中所列:

从“模块名称”导入 defaultMember;

import * as name from "module-name";

从“模块名称”导入{成员};

import { member as alias } from "module-name";

从“模块名称”导入 { member1 , member2 };

import { member1 , member2 as alias2 , [...] } from "module-name";

import defaultMember, { member [ , [...] ] } from "module-name";

import defaultMember, * as name from "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;

【讨论】:

  • 您好,感谢您的详细回答,我一定会仔细查看提到的文档。不幸的是,最后一个带有 const 的构造(我之前尝试过)不起作用,但会更合乎逻辑
  • 我添加了一个说明。我认为那是因为它们是接口而不是真正的类,不是吗?所以不, const 解构没有意义,因为没有什么可以解构的。在这种情况下,第一个选项是正确的,顺便说一句,不单独导入接口是很常规的,因为foo: Express.NextFunction 读取更清晰,这样接口就不会与类混淆,即使它们没有@987654330 @ 后缀。
  • 是的,都是接口:)
  • 感谢您对此发表评论
猜你喜欢
  • 2018-11-17
  • 1970-01-01
  • 2017-03-11
  • 1970-01-01
  • 2015-05-23
  • 1970-01-01
  • 2015-08-13
  • 1970-01-01
相关资源
最近更新 更多