我使用了很多自己的和第三方的库。我看到“typings”目录包含一些Jquery和WinRT…但它们是如何产生的呢?
当前回答
正如Ryan所说,tsc编译器有一个switch——声明,它生成一个.d。Ts文件中的。Ts文件。还要注意(排除bug) TypeScript应该能够编译Javascript,所以你可以将现有的Javascript代码传递给tsc编译器。
其他回答
有一些选项可供您选择,这取决于所讨论的库,它是如何编写的,以及您正在寻找的准确性级别。让我们大致按可取性降序来回顾一下这些选项。
也许它已经存在了
Always check DefinitelyTyped (https://github.com/DefinitelyTyped/DefinitelyTyped) first. This is a community repo full of literally thousands of .d.ts files and it's very likely the thing you're using is already there. You should also check TypeSearch (https://microsoft.github.io/TypeSearch/) which is a search engine for NPM-published .d.ts files; this will have slightly more definitions than DefinitelyTyped. A few modules are also shipping their own definitions as part of their NPM distribution, so also see if that's the case before trying to write your own.
也许你不需要
TypeScript现在支持——allowJs标志,并将在.js文件中进行更多基于js的推断。您可以尝试在编译中包含.js文件以及——allowJs设置,以查看这是否为您提供了足够好的类型信息。TypeScript会在这些文件中识别es5风格的类和JSDoc注释,但如果库以一种奇怪的方式初始化自己,可能会出错。
从——allowJs开始
如果——allowJs给了你不错的结果,而你想自己写一个更好的定义文件,你可以结合——allowJs和——declaration来查看TypeScript对库类型的“最佳猜测”。这将为您提供一个不错的起点,如果JSDoc注释编写得很好,并且编译器能够找到它们,那么它可能与手工编写的文件一样好。
从dts-gen开始
如果——allowJs不能工作,您可能需要使用dts-gen (https://github.com/Microsoft/dts-gen)来获得一个起点。该工具使用对象的运行时形状来准确地枚举所有可用属性。从好的方面来看,这往往是非常准确的,但是该工具还不支持抓取JSDoc注释来填充其他类型。你可以这样运行:
npm install -g dts-gen
dts-gen -m <your-module>
这将生成your-module.d。Ts在当前文件夹。
按下止闹按钮
如果你只是想以后再做,暂时不需要类型,现在你可以在TypeScript 2.0中编写
declare module "foo";
这将允许您导入类型为any的“foo”模块。如果你有一个以后想处理的全局变量,就写
declare const foo: any;
它会给你一个foo变量。
正如http://channel9.msdn.com/posts/Anders-Hejlsberg-Steve-Lucco-and-Luke-Hoban-Inside-TypeScript 00:33:52所描述的,他们已经建立了一个工具,将WebIDL和WinRT元数据转换为TypeScript d.ts
你可以使用tsc——declaration fileName。就像Ryan描述的那样,或者你可以在tsconfig的compileroption下指定declaration: true。Json,假设你已经有了一个tsconfig。Json在你的项目。
正如Ryan所说,tsc编译器有一个switch——声明,它生成一个.d。Ts文件中的。Ts文件。还要注意(排除bug) TypeScript应该能够编译Javascript,所以你可以将现有的Javascript代码传递给tsc编译器。
处理这种情况(如果DefinitelyTyped上没有声明文件)的最佳方法是仅为所使用的内容而不是整个库编写声明。这大大减少了工作——此外,编译器可以通过抱怨丢失的方法来帮助解决问题。
推荐文章
- Angular 2显示和隐藏一个元素
- 具有构造签名的接口如何工作?
- 'React'指的是一个UMD全局,但当前文件是一个模块
- Angular 2中的“component”不是一个已知的元素
- TypeScript错误:属性“X”在类型“Window”上不存在
- 我怎么能计算在打字稿2日期之间的时间
- 正确使用错误
- 如何修复TS2322:“可以实例化与约束'对象'的不同子类型”?
- 如何在Angular中动态加载外部脚本?
- 当组件属性依赖于当前日期时间时,如何管理Angular2“expression has changed after it was checked”异常
- 如何部署Angular应用?
- 如何定义静态属性在TypeScript接口
- 获取函数的返回类型
- 为什么是事件。目标不是元素在Typescript?
- 如何生成。d。ts“typings”定义文件从现有的JavaScript库?