Dan*_*ser 8 javascript npm typescript definitelytyped
我正在使用一个foo在DefinitelyTyped上不存在的npm包.换句话说,@types/foo不存在(或可能已过时!)
我仍然希望能够在更严格的设置下使用它noImplicitAny,所以我需要自己编写自定义定义文件.最后,我想向DefinitelyTyped发送一个pull请求,以便此文件对我项目之外的其他人有用.
有很简单的解决方案,比如创建一个名为的全局文件./src/types.d.ts,我可以编写以下内容
declare module "foo" {
export function hello(): void;
export function world(): void;
}
Run Code Online (Sandbox Code Playgroud)
但是如果我使用那种语法,当我将它提交给DefinitelyTyped时,我可能需要重写我的模块.
如何构建我的项目以便我可以轻松地创作然后将本地.d.ts文件发送到DefinitelyTyped?
Dan*_*ser 22
我会一步一步地解释,所以这可能看起来很冗长,但按照给出的指示应该只需几分钟.实际上,这是您可以在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
Run Code Online (Sandbox Code Playgroud)
让我们假设以下项目结构:
proj/
?? tsconfig.json
?? src/
?? ...
Run Code Online (Sandbox Code Playgroud)
无论它叫什么,但我们会称之为local-types.一旦掌握了我们在这里所做的事情,您就可以将其更改为您想要的任何内容.
proj/
?? tsconfig.json
?? local-types/
?? src/
?? ...
Run Code Online (Sandbox Code Playgroud)
在这个例子之外的大多数情况下,我可能只是这个名字
types.
既然你要导入一个名为模块foo,我们将创建一个命名的文件夹foo用index.d.ts.
// local-types/foo/index.d.ts
export function hello(): void;
export function world(): void;
Run Code Online (Sandbox Code Playgroud)
我们还想通过创建一个package.json来使它成为一个npm包:
cd local-types/foo
npm init --scope types --yes
Run Code Online (Sandbox Code Playgroud)
此时,您的项目应如下所示:
proj/
?? tsconfig.json
?? local-types/
| ?? foo/
| ?? index.d.ts
| ?? package.json
?? src/
?? ...
Run Code Online (Sandbox Code Playgroud)
您现在应该可以foo从其中的任何文件导入src.
import { hello, world } from "foo";
hello();
world();
Run Code Online (Sandbox Code Playgroud)
请记住,您可能没有单一的入口点包index.d.ts.在这种情况下,你会想要模仿在npm上发布的包结构.
如果您正在编写库,那么您可能希望在依赖项中使用它,但应用程序可能希望使用devDependencies.只需添加file:./local-types/foo为以下版本@types/foo:
"dependencies": {
"@types/foo": "file:local-types/foo"
}
Run Code Online (Sandbox Code Playgroud)
您的.d.ts文件是否完整且有用?考虑编写一些测试并向DefinitelyTyped发送拉取请求,以便其他人可以从您已完成的工作中受益!
如果您能够在运行时导入这些包没有问题,那么您已经拥有了适当的包结构.
declare module "..."在任何这些本地类型包中使用语法.
import或export除非它们是真正的脚本/全局文件.| 归档时间: |
|
| 查看次数: |
2346 次 |
| 最近记录: |