如何在没有定义文件的库中使用 TypeScript?
How to use TypeScript w/ a library with no definition file?
所以我想在我的 koa
TS 项目中使用 pino-clf
库。
我在尝试编译时不断得到这个:
TSError: ⨯ Unable to compile TypeScript:
src/modules/logger/index.ts:5:21 - error TS7016: Could not find a declaration file for module 'pino-clf'. '/dev/webservices/node_modules/pino-clf/index.js' implicitly has an 'any' type.
Try `npm i --save-dev @types/pino-clf` if it exists or add a new declaration (.d.ts) file containing `declare module 'pino-clf';`
5 import pinoClf from 'pino-clf'
~~~~~~~~~~
pino-clf 没有 def 文件,也没有可用的 @types/pino-clf。
我尝试在将 lib 导入到其中声明模块 'pino-clf' 的文件的文件夹中添加一个 pino-clf.d.ts
文件。虽然这让我的 IDE 中的红色波浪形消失了,但 TS 仍然拒绝编译。
我们究竟如何使用一个带有 TS 的纯 JS 库和 w/o 添加 ts-ignore?
所以有两种方法可以实现。
解决方案一:可能是最简单的
您可以只使用 require ex: const pinoClf = require("pinoClf")
- down-side 是点引用或智能感知不可用,但如果您知道要使用的方法,那没什么大不了的。
解决方案二:
在项目的根目录中创建您自己的 typeDef 文件。例如,
pino-clf.custom.d.ts
declare module "pino-clf.custom" {
const pinoClfJs = require("pinoClf");
export default class pinoClf {
commonLog (type: string, dest: NodeJS.WriteStream, ancillary: any): void {
pinoClfJs.commonLog(type, dest, ancillary);
}
}
}
然后在你的 tsconfig.json
文件中 包含 新的 typeDef 文件:
{
... // assuming src is already there
"include": [
"src", "pino-clf.custom.d.ts"
]
}
之后你可以简单地导入它 import pinoClf from "pino-clf.custom";
这是一个非常基本的实现,如果您需要更复杂的东西,建议您进行研究。当然,解决问题的方法不止一种,但我希望这对您有所帮助。干杯。
所以我想在我的 koa
TS 项目中使用 pino-clf
库。
我在尝试编译时不断得到这个:
TSError: ⨯ Unable to compile TypeScript:
src/modules/logger/index.ts:5:21 - error TS7016: Could not find a declaration file for module 'pino-clf'. '/dev/webservices/node_modules/pino-clf/index.js' implicitly has an 'any' type.
Try `npm i --save-dev @types/pino-clf` if it exists or add a new declaration (.d.ts) file containing `declare module 'pino-clf';`
5 import pinoClf from 'pino-clf'
~~~~~~~~~~
pino-clf 没有 def 文件,也没有可用的 @types/pino-clf。
我尝试在将 lib 导入到其中声明模块 'pino-clf' 的文件的文件夹中添加一个 pino-clf.d.ts
文件。虽然这让我的 IDE 中的红色波浪形消失了,但 TS 仍然拒绝编译。
我们究竟如何使用一个带有 TS 的纯 JS 库和 w/o 添加 ts-ignore?
所以有两种方法可以实现。
解决方案一:可能是最简单的
您可以只使用 require ex: const pinoClf = require("pinoClf")
- down-side 是点引用或智能感知不可用,但如果您知道要使用的方法,那没什么大不了的。
解决方案二:
在项目的根目录中创建您自己的 typeDef 文件。例如,
pino-clf.custom.d.ts
declare module "pino-clf.custom" {
const pinoClfJs = require("pinoClf");
export default class pinoClf {
commonLog (type: string, dest: NodeJS.WriteStream, ancillary: any): void {
pinoClfJs.commonLog(type, dest, ancillary);
}
}
}
然后在你的 tsconfig.json
文件中 包含 新的 typeDef 文件:
{
... // assuming src is already there
"include": [
"src", "pino-clf.custom.d.ts"
]
}
之后你可以简单地导入它 import pinoClf from "pino-clf.custom";
这是一个非常基本的实现,如果您需要更复杂的东西,建议您进行研究。当然,解决问题的方法不止一种,但我希望这对您有所帮助。干杯。