[英]How to use the new @types packages for TypeScript typings?
我已經開始遷移現有的大型,基於namespace
和<reference>
的TypeScript應用程序,以使用modules
和@types
NPM存儲庫。 但是,我每秒都遇到問題。
global
文件,導致我無法import
它,因為TS抱怨它不是模塊。 module
形狀的類型文件(例如moment.js
)時,TS似乎仍然找不到它,並且import * as moment from 'moment'
說模塊未找到而導致行import * as moment from 'moment'
錯誤。 該技術的當前狀態是什么? 乍看之下,它似乎還遠遠沒有做好生產准備。
解決這些問題的技巧和技巧是什么?
我的目標是es5
並使用es6
作為modules
配置。 這可能是問題嗎? 據我所知,TS也支持es5
輸出的es6
模塊語法。
當前完成工作的方式絕對可以用於生產。 但是,有些事情並不明顯,這也不是您的錯。
讓我嘗試一個接一個地回答您的問題。
- 許多圖書館甚至都沒有打字。
在TypeScript 2.1中,只要您在node_modules
安裝了一個包並且沒有打開noImplicitAny
,就可以導入所需的任何內容。
如果你想使用noImplicitAny
(這我會建議您預計隨着時間的推移長大任何項目),你可以隨時創建declarations.d.ts
項目源文件夾,因為你需要聲明的模塊:
// do anything you want when you import `"foo"` now.
declare module "foo";
// can only access the `hello` export when importing `"bar"`.
declare module "bar" {
export var hello;
}
- 許多圖書館在那里的打字完全過時了。
您絕對可以隨意向DefinitelyTyped發送拉取請求,但是如果您真的很費時間,則可以使用我針對要點(1)給出的方法。
- 許多庫都有
global
文件,導致我無法import
它,因為TS抱怨它不是模塊。
如果您需要使用DefinitelyTyped中的全局聲明文件,並且該文件未自動包含在您的項目中,則可能需要將其添加到tsconfig.json
的types
字段中。 在這里看到我的其他答案,但是關鍵是如果您需要包括foo
和bar
軟件包的全局聲明,並且已經安裝了@types/foo
和@types/bar
,則可以在tsconfig.json
編寫以下tsconfig.json
。
{
"compilerOptions": {
"types": ["foo", "bar"]
}
}
- 當一個庫的NPM包中正確包含了一個
module
形狀的類型文件(例如moment.js
)時,TS似乎仍然找不到它,並且import * as moment from 'moment'
說模塊未找到而導致行import * as moment from 'moment'
錯誤。
我認為這與您以ES6為目標有關。 嘗試在tsconfig.json
"node"
tsconfig.json
"moduleResolution"
選項更改為"node"
。
{
"compilerOptions": {
"moduleResolution": "node"
}
}
抱歉,這是一個陷阱。 基本原理是,唯一具有這種解析語義的模塊加載系統是CommonJS(Node使用的策略)。 我同意可以改善這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.