.d.ts 用于 JavaScript 库的打字稿文件

Posted

技术标签:

【中文标题】.d.ts 用于 JavaScript 库的打字稿文件【英文标题】:.d.ts typescript file for a javascript library 【发布时间】:2018-09-13 23:15:09 【问题描述】:

我正在尝试创建一个描述文件以使用带有 typescript 的 javascript 库。

目前我正在尝试遵循这些指南:TypeScript Official website 和 Medium guide to migrate to typescript

具体来说,我正在尝试为leaflet-icon-pulse 创建一个打字稿描述文件,我认为这很简单,可以开始

于是我下载了git项目,创建tsconfig.json如下


"compilerOptions": 
  "outDir": "./built",
  "allowJs": true,
  "noImplicitAny": true,
  "strictNullChecks": true,
  "target": "es5",
  "module": "commonjs"
,
"include": [
  "./src/**/*"
],
"exclude": [
  "node_modules"
]

然后我尝试将文件 L.Icon.Pulse.js 转换为 L.Icon.Pulse.ts,但我开始收到如下错误:

Property X does not exists on type Y

据我所知,我需要让 js 存在并简单地创建一个 L.Icon.Pulse.d.ts 文件

现在我的样子:

import * as L from 'leaflet';
declare module 'leaflet' 
     function Pulse(options?: any): any;

但现在我不知道如何开始,也找不到关于如何继续的好的教程或示例。

有人可以给我一些关于如何进行的提示吗?

谢谢!

【问题讨论】:

【参考方案1】:

我可能会忽略打字稿错误,而不是创建 d.ts 文件。

所以,你通过 npm 安装leaflet-pulse-icon:

npm install leaflet-pulse-icon

...然后你将它包含在你的组件中:

import 'leaflet-pulse-icon';

为了避免错误,只需让 TypeScript 暂时忽略输入内容。所以,而不是:

let pulsingIcon = L.icon.pulse(iconSize:[20,20],color:'red');

你应该使用:

let pulsingIcon = (L as any).icon.pulse(iconSize:[20,20],color:'red');

...使用 L 作为“任何类型的”变量。

当然,TypeScript 不应该在没有类型的情况下工作(!),但偶尔,我发现使用 ":any" 方式绕过一些错误很方便。

【讨论】:

以上是关于.d.ts 用于 JavaScript 库的打字稿文件的主要内容,如果未能解决你的问题,请参考以下文章

打字稿中的 *.d.ts 与 *.ts 有啥区别?

打字稿找不到 .d.ts 文件

打字稿:如何为图像自动生成 d.ts 文件

“module/index.d.ts”和“@types/module/index.d.ts”之间的打字稿冲突

如何在 index.d.ts 打字稿定义文件中引用 Redux 类型?

打字稿无法解析类型