2017-08-14 34 views
1

我從TSLint獲得:如何將導入全部與其他導入器結合使用?

Multiple imports from 'moment' can be combined into one. 

有罪代碼:

import * as moment from 'moment'; 
import { Moment } from 'moment'; 

我嘗試了好幾種變種沒有成功(我沒有找到文檔相關的例子):

import * as moment, { Moment } from 'moment'; 
import { * as moment, Moment } from 'moment'; 
import { * as moment, Moment as Moment } from 'moment'; 
+0

我不知道TS,但在ES 6,你可以去只是'進口時刻,從「時刻」 {時刻};'(也許它會爲TS以及工作)。 –

+1

'從*時刻開始'輸入*時刻;'是正確的。但只有那:)然後用'moment.Moment'等方式訪問所有東西。 – Wernerson

+0

@Wernerson我認爲它可以像這樣修改,但是當TSLint說它可以合併爲一個導入時,我認爲這意味着「合併爲一個導入而沒有修改其他任何東西「。 – monnef

回答

0

如果您在導入中使用星號,則可以通過名稱爲as的名稱訪問導入模塊中的所有內容以獲取星號。

在這個特殊的例子:

import * as moment from 'moment'; 

你並不需要導入{ Moment }以及因爲你可以簡單地在你的代碼中訪問Moment通過moment.Moment

注意

你不能用任何其他進口聯合星號進口,是的,在這個特殊的情況下,TSLint消息是有點誤導。

編輯

正如我在我的第一個評論中寫道,這一ES6方式應該工作以及和它確實有效:

import moment, { Moment } from 'moment'; 

它被添加到TS 1.8版本(見release notes) 。

模塊裝載機等SystemJS包裹CommonJS的模塊,然後暴露作爲 默認ES6導入。由於基於加載程序的模塊形狀看起來不同,因此無法在模塊 的SystemJS和CommonJS實現之間共享定義 文件。

設置新的編譯器標誌--allowSyntheticDefaultImports指示 模塊加載器執行某種合成默認導入 未在導入的.ts或.d.ts中指示的成員創建。 編譯器將推斷存在具有整個模塊本身的 形狀的默認導出。

默認情況下,系統模塊具有此標誌。

+0

我的理解是正確的 - linter錯誤是錯誤的,它不能被合併爲一個導入而不觸及代碼的其餘部分? – monnef

+0

@monnef排序,我仍然相信'從'時刻'輸入時刻,{瞬間};'應該可以工作,但這肯定會奏效。另一方面,你不能將星號導入與其他任何東西結合起來,是的,在這種特殊情況下,TSLint消息有點誤導。 –

0

在Typescript中,您可以從一個文件中導出多個函數,類和變量。在大多數情況下,你只是想喜歡進口的一些特別的事情:

import { Component } from "@angular/core";

瞬間建有一點點不同,所以你通常導入它是這樣的:

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... 
} 

little fancy paint grahpic

在這裏你可以看到更多或更少的它是如何工作的。 (對不起,油漆技巧:/)

變量(在示例時刻)可以有任何你喜歡的名字。

我希望你能理解這一點。如果不只是問。

0

你只是這樣做:

import moment, {Moment} from 'moment'; 

tsconfig.json你應該有allowSyntheticDefaultImports設置爲true爲打字稿1.8的(它的默認值是true)。

+0

我試過這個不同的模塊,但'import xyz,{rest}'只有在默認導出和'import *爲xyz,{rest}'是語法錯誤時纔有效。 –

+0

正確,這隻有在有默認導出時纔有效。 – gilamran

3

要小心,因爲:

import * as moment from 'moment' 

import moment from 'moment' 

不同,因爲第二隻導入命名空間瞬間和內的一切,但是第一進口一切,包括功能力矩()超出了命名空間。 正確輸入可以是:

import * as moment from 'moment'; 
type Moment = moment.Moment; 
相關問題