我来自TSLint:
curl -XPOST "http://localhost:9200/t/t/1/_update" -d'
{
"script" : {
"inline": "ctx._source.hobbies.add(params.hobby)",
"params" : {
"hobby" : "c"
}
}
}'
有罪代码:
Multiple imports from 'moment' can be combined into one.
我尝试了几种变体但没有成功(我在docs中找不到相关的例子):
import * as moment from 'moment';
import { Moment } from 'moment';
答案 0 :(得分:10)
小心,因为:
import * as moment from 'moment'
与
不同import moment from 'moment'
因为第二个只导入命名空间时刻以及其中的所有内容,但是第一个导入包括函数moment()在内的所有内容都超出了命名空间。 正确导入可以是:
import * as moment from 'moment';
type Moment = moment.Moment;
答案 1 :(得分:5)
如果您在导入时使用星号,则可以使用星号as
的名称从导入的模块访问所有内容。
在这个特定的例子中:
import * as moment from 'moment';
您也不需要导入{ Moment }
,因为您只需在代码中Moment
访问moment.Moment
。
注意强>
您不能将星号导入与任何其他导入结合使用,是的,在这种特殊情况下,TSLint消息有点误导。
修改强>
正如我在第一篇评论中所写的那样,这种ES6方式应该也能正常工作,它确实有效:
import moment, { Moment } from 'moment';
它在版本1.8中被添加到TS中(参见release notes)。
像SystemJS这样的模块加载器包装CommonJS模块并将其公开为 默认的ES6导入。这使得无法共享定义 SystemJS和CommonJS模块之间的文件 因为模块形状基于加载器看起来不同。
设置新编译器标志--allowSyntheticDefaultImports指示 模块加载器执行某种合成默认导入 成员创建未在导入的.ts或.d.ts中指明。该 编译器将推断出存在具有的默认导出 整个模块本身的形状。
系统模块默认启用此标志。
答案 2 :(得分:2)
以下并不总是有效。这完全取决于someModule
是否定义了default
导出。如果是,那么它将起作用。
import someModule, { someMember } from 'someModule';
我引用的模块没有定义default
,所以我选择了以下方法:
import * as someModule from 'someModule';
// To avoid multiple imports from the same module, destruct the exported members from the module.
const { someMember } = someModule;
答案 3 :(得分:1)
在Typescript中,您可以从一个文件中导出多个函数,类和变量。在大多数情况下,您只需要一些特殊的导入内容:
import { Component } from "@angular/core";
Moment的构建有点不同,所以你通常会像这样导入:
import * as moment from "moment";
这也可用于角度导入:
import * as AngularCore from "@angular/core";
@AngularCore.Component({
//...
这是相同的技术。在第二种方式中,您只需将 ALL 导出分配给名为AngularCore(或时刻)的变量。现在这就像一个包装器。你可以把它想象成一个Javascript对象:
var AngularCore = {
Component: // the component things....
OnInit: // the OnInit interface...
}
在这里你可以看到它的工作方式。 (对不起油漆技巧不好:/)
变量(在示例时刻)可以包含您喜欢的任何名称。
我希望你能理解这一点。如果不只是问。
答案 4 :(得分:-1)
你这样做:
import moment, {Moment} from 'moment';
在tsconfig.json
中,你应该将allowSyntheticDefaultImports
设置为true
,因为它来自于Typescript 1.8(默认情况下它是真的)。