我使用了很多自己的和第三方的库。我看到“typings”目录包含一些Jquery和WinRT…但它们是如何产生的呢?
当前回答
我会寻找支持script#或SharpKit的第三方JS库的现有映射。使用这些c#到。js交叉编译器的用户可能会遇到你现在面临的问题,并且可能已经发布了一个开源程序来扫描你的第三方库并将其转换为框架c#类。如果是这样的话,破解扫描器程序,生成TypeScript代替c#。
如果做不到这一点,将第三方库的c#公共接口转换为TypeScript定义可能比读取源JavaScript更简单。
我特别感兴趣的是Sencha的ExtJS RIA框架,我知道已经发布了为script#或SharpKit生成c#解释的项目
其他回答
下面是一些PowerShell,它创建了一个单独的TypeScript定义文件,一个包含多个*.js文件的现代JavaScript库。
首先,将所有扩展名更改为.ts。
Get-ChildItem | foreach { Rename-Item $_ $_.Name.Replace(".js", ".ts") }
其次,使用TypeScript编译器生成定义文件。会有一堆编译器错误,但我们可以忽略它们。
Get-ChildItem | foreach { tsc $_.Name }
最后,将所有的*.d。Ts文件到一个索引。Ts,删除导入语句并从每个导出语句中删除默认值。
Remove-Item index.d.ts;
Get-ChildItem -Path *.d.ts -Exclude "Index.d.ts" | `
foreach { Get-Content $_ } | `
where { !$_.ToString().StartsWith("import") } | `
foreach { $_.Replace("export default", "export") } | `
foreach { Add-Content index.d.ts $_ }
最后生成一个单独的、可用的index.d.ts文件,其中包含许多定义。
正如Ryan所说,tsc编译器有一个switch——声明,它生成一个.d。Ts文件中的。Ts文件。还要注意(排除bug) TypeScript应该能够编译Javascript,所以你可以将现有的Javascript代码传递给tsc编译器。
处理这种情况(如果DefinitelyTyped上没有声明文件)的最佳方法是仅为所使用的内容而不是整个库编写声明。这大大减少了工作——此外,编译器可以通过抱怨丢失的方法来帮助解决问题。
你可以使用tsc——declaration fileName。就像Ryan描述的那样,或者你可以在tsconfig的compileroption下指定declaration: true。Json,假设你已经有了一个tsconfig。Json在你的项目。
在创建自己的库时,您可以创建*.d。ts文件使用tsc (TypeScript编译器)命令,如下所示: (假设您正在将库构建到dist/lib文件夹)
tsc -d --declarationDir dist/lib --declarationMap --emitDeclarationOnly
-d(——declaration):生成*.d。ts文件 ——declarationDir dist/lib:生成声明文件的输出目录。 ——declarationMap:为每个对应的' .d生成一个源地图。ts文件。 ——emitDeclarationOnly:只释放' .d。Ts的声明文件。(没有编译过的JS)
(查看文档了解所有命令行编译器选项)
或者在你的package.json中:
"scripts": {
"build:types": "tsc -d --declarationDir dist/lib --declarationMap --emitDeclarationOnly",
}
然后run: yarn build:types(或NPM run build:types)
推荐文章
- 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库?