现有包的类型声明问题
我想练习为现有的 JS 包编写类型
比如我拿了没有类型的调试包
包含必要文件的存储库:
https ://github.com/Ulibka68/pk2
代码本身由三行组成:
import createDebug from 'debug';
export const debug = createDebug('node-kraken-ws')
debug('start');
此外,在 types 目录中,我创建了放置 index.d.ts 文件的 debug 子目录:
declare module 'debug' {
export function createDebug(a:string) : unknown;
}
添加到 tsconfig:
"typeRoots": ["./node_modules/@types", "./types"],
此代码给出错误:
cli.ts:1:22 - error TS2349: This expression is not callable.
Type 'typeof import("debug")' has no call signatures.
事实证明,由于某种原因 tsc 没有选择类型描述,尽管我似乎做的一切都是正确的。“类型”部分 - 限制了导入类型的列表,我删除了
这个问题当然可以通过使用以下命令导入类型来解决:
npm i -D @types/debug
但我想尝试自己编写类型定义。
为什么我做不到?
现在您已经声明该模块
debug
有一个函数createDebug
。你真正需要做的是声明模块本身就是那个函数。像这样:之后你会从编译器那里得到一个错误就行了
debug('start')
。