Javascript 如何编写和使用不带';在@types或DefinitelyTyped上不存在吗?
我正在使用一个名为Javascript 如何编写和使用不带';在@types或DefinitelyTyped上不存在吗?,javascript,typescript,npm,definitelytyped,Javascript,Typescript,Npm,Definitelytyped,我正在使用一个名为foo的npm包,它在DefinitelyTyped上不存在。换句话说,@types/foo不存在(或者可能已经过时!) 我希望仍然能够在更严格的设置下使用它,例如noImplicitAny,因此我需要自己编写自定义定义文件。最后,我想向DefinitelyTyped发送一个pull请求,以便该文件对我项目之外的其他人有用 有一些简单的解决方案,比如创建一个名为/src/types.d.ts的全局文件,我可以在其中编写以下代码 declare module "foo" {
foo
的npm包,它在DefinitelyTyped上不存在。换句话说,@types/foo
不存在(或者可能已经过时!)
我希望仍然能够在更严格的设置下使用它,例如noImplicitAny
,因此我需要自己编写自定义定义文件。最后,我想向DefinitelyTyped发送一个pull请求,以便该文件对我项目之外的其他人有用
有一些简单的解决方案,比如创建一个名为/src/types.d.ts的全局文件,我可以在其中编写以下代码
declare module "foo" {
export function hello(): void;
export function world(): void;
}
但是如果我使用这种语法,当我将模块提交给DefinitelyTyped时,我可能需要重写模块
我如何组织我的项目,以便我可以轻松地编写本地.d.ts文件,然后将其发送到DefinitelyTyped?我将一步一步地进行解释,这样做可能看起来很冗长,但是按照给出的说明应该只需要几分钟。事实上,这里有一个简短的版本,您可以在bash或PowerShell中运行
mkdir-p./localtypes/foo
cd/本地类型/foo
npm init--范围类型--是
echo“导出函数hello():void;导出函数world():void”>。/index.d.ts
cd../。。
npm安装/本地类型/foo
背景
让我们设想以下项目结构:
proj/
├─ tsconfig.json
└─ src/
└─ ...
在项目的根目录下创建本地类型文件夹。
不管它叫什么,但我们称它为本地类型
。一旦你掌握了我们在这里所做的事情,你可以把它改成你想要的任何东西
proj/
├─ tsconfig.json
├─ local-types/
└─ src/
└─ ...
在本例之外的大多数情况下,我可能只将其命名为类型
在本地类型目录中创建新包
由于您试图导入名为foo
的模块,我们将创建一个名为foo
的文件夹,其中包含索引.d.ts
//本地类型/foo/index.d.ts
导出函数hello():void;
导出函数world():void;
我们还希望通过创建一个package.json使其成为一个npm包:
cd本地类型/foo
npm init--范围类型--是
此时,您的项目应如下所示:
proj/
├─ tsconfig.json
├─ local-types/
| └─ foo/
| └─ index.d.ts
| └─ package.json
└─ src/
└─ ...
您现在应该可以从src
中的任何文件导入foo
从“foo”导入{hello,world};
你好;
世界();
请记住,您可能没有一个带有index.d.ts
的单一入口点包。在这种情况下,您将希望模仿在npm上发布的包结构
将包添加为依赖项(或潜在的依赖项)
如果您正在编写库,您可能希望在依赖项中使用该库,但应用程序可能希望使用devdependency。只需添加文件:./local types/foo
作为@types/foo
的版本:
“依赖项”:{
@types/foo:“文件:本地类型/foo”
}
发布到DefinitelyTyped
您的.d.ts
文件是否完整且有用?考虑编写一些测试并发送一个拉式请求来定义类型,以便其他人可以从你所做的工作中受益。p>
如果您能够在运行时导入这些包而没有问题,那么您已经拥有了适当的包结构
要记住的事情
- 不要在这些本地类型包中使用
声明模块“…”
语法。
- …除非你想写一个模块扩充。但你可能不是
- 确保您的文件至少有一个
导入
或导出
,除非它们是真正的脚本/全局文件
感谢您的详细解释!我认为详细版本中缺少命令“npm install./local types/foo”