[英]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.