.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 库的打字稿文件的主要内容,如果未能解决你的问题,请参考以下文章
“module/index.d.ts”和“@types/module/index.d.ts”之间的打字稿冲突