gpt4 book ai didi

javascript - 如何编写和使用 @types 或 DefinitelyTyped 上不存在的自定义声明文件?

转载 作者:数据小太阳 更新时间:2023-10-29 04:55:26 24 4
gpt4 key购买 nike

我正在使用一个名为 foo 的 npm 包,它在 DefinitelyTyped 上不存在。换句话说,@types/foo 不存在(或者可能已过时!)

我希望仍然能够在更严格的设置下使用它,例如 noImplicitAny,因此我需要自己编写自定义定义文件。最后,我想向 DefinitelyTyped 发送拉取请求,以便该文件对我项目之外的其他人有用。

有一些简单的解决方案,比如创建一个名为 ./src/types.d.ts 的全局文件,我可以在其中编写以下内容

declare module "foo" {
export function hello(): void;
export function world(): void;
}

但如果我使用该语法,当我将它提交给 DefinitelyTyped 时,我可能需要重写我的模块。

我如何构建我的项目,以便我可以轻松地创作并将本地 .d.ts 文件发送到 DefinitelyTyped?

最佳答案

我将逐步进行解释,因此这可能看起来很长,但按照给出的说明进行操作只需几分钟。事实上,这是您可以在 bash 或 PowerShell 中运行的简短版本!

mkdir -p ./local-types/foo
cd ./local-types/foo
npm init --scope types --yes
echo "export function hello(): void; export function world(): void" > ./index.d.ts
cd ../..
npm install ./local-types/foo

背景

让我们想象一下下面的项目结构:

proj/
├─ tsconfig.json
└─ src/
└─ ...

在项目的根目录下创建一个 local-types 文件夹。

不管它叫什么,但我们称它为local-types。一旦您很好地掌握了我们在这里所做的事情,您就可以将其更改为您想要的任何内容。

proj/
├─ tsconfig.json
├─ local-types/
└─ src/
└─ ...

In most cases outside of this example, I might just name this types.

在本地类型目录中创建一个新包

由于您正在尝试导入一个名为 foo 的模块,我们将创建一个名为 foo 的文件夹,其中包含一个 index.d.ts.

// local-types/foo/index.d.ts

export function hello(): void;

export function world(): void;

我们还想通过创建一个 package.json 将它变成一个 npm 包:

cd local-types/foo
npm init --scope types --yes

此时,您的项目应该如下所示:

proj/
├─ tsconfig.json
├─ local-types/
| └─ foo/
| └─ index.d.ts
| └─ package.json
└─ src/
└─ ...

您现在应该能够从 src 中的任何文件导入 foo

import { hello, world } from "foo";

hello();
world();

请记住,您可能没有带有 index.d.ts 的单入口点包。在这种情况下,您需要模仿在 npm 上发布的包结构。

将包添加为依赖项(或潜在的 devDependency)

如果您正在编写一个库,您可能需要在依赖项中使用它,但应用程序可能需要使用 devDependencies。只需添加 file:./local-types/foo 作为 @types/foo 的版本:

"dependencies": {
"@types/foo": "file:local-types/foo"
}

发布到 DefinitelyTyped

您的 .d.ts 文件是否完整且有用?考虑编写一些测试并向 DefinitelyTyped 发送拉取请求,以便其他人可以从您所做的工作中受益!

如果您能够在运行时毫无问题地导入这些包,那么您就已经拥有了合适的包结构。

注意事项

关于javascript - 如何编写和使用 @types 或 DefinitelyTyped 上不存在的自定义声明文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44796039/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com