2017-06-13 57 views
0

看起來在TypeScript中有兩種使用接口的方式:我可以在普通的.ts文件中定義它們並導入它們,或者我可以在.d.ts文件中定義它們,讓編譯器自動從node_modules/@中找到它們或者通過在tsconfig.json中爲typeRoots添加相關路徑,並且它們變得「魔術般」可用。使用TypeScript聲明(* .d.ts)和接口的正確方法是什麼?

目前我有兩個項目:一個客戶端(React)和一個服務器(Express),都是用TypeScript編寫的。我在兩個項目中都使用了某些接口,爲了避免項目之間的依賴關係,我將通用接口提取到一個單獨的項目中,並聲明爲聲明文件。然後我說這個項目作爲一個開發依賴這種方式:

"@types/my-definitions": "git+ssh://[email protected]/myaccount/my-definitions.git" 

這樣打字稿編譯器會自動從node_modules/@類型找到接口,我沒有導入接口。

我的問題是,這是一個很好的做法,或者我應該有普通的.ts文件中的接口,將項目作爲普通依賴項導入,並顯式導入我正在使用的接口?每種方法的優缺點是什麼?

回答

0

.d.ts文件根據您的.ts文件生成爲打印腳本項目的輸出(以及編譯後的JS)。

通常這些是通過導入引入的,而不是通過魔法發現,因爲它們位於特定的文件夾中。

當你使用DOM/BOM/NodeJS定義的環境JS全局變量時,你希望將.d.ts放在該魔法文件夾中的時間,以便它們可用於所有代碼。你不需要明確地導入它們,它們總是可用的(就像它們將在JavaScript中一樣)

然而,當處理一個實際的庫(輸出JavaScript代碼)時。您應該通過package.json導入庫並通過查看node_modules來配置TypeScript來解析模塊。

調用document.createElement()返回HTMLElement。通過添加環境定義,您不必導入document對象。

但是,假設你使用的角度,當你想使用一個角類,你必須明確地導入

import {Component} from "@angular/core" 

打字稿會知道去尋找ts文件node_modules/@angular/core。它可能是一個原始的.ts,但這些通常不會打包爲TypeScript項目的輸出,通常您只能獲得編譯後的JS和.d.ts文件。

摘要

你應該把你的可重用代碼的第三方庫像角並導入它以同樣的方式。不要神奇地將這些定義添加到環境中(我們有足夠的全局變量)

相關問題