gpt4 book ai didi

typescript - 在编译输出中包含外部类型定义

转载 作者:搜寻专家 更新时间:2023-10-30 21:57:57 28 4
gpt4 key购买 nike

我正在用 TypeScript 编写一个库:@cjol/core .它有一个 JavaScript 依赖项 dep , 它没有 @types包可用。相反,我写了一个自定义 dep.d.ts文件,这使得在我开发库时所有的类型都能很好地工作。一切都编译得很好但是我的dep.d.ts不会出现在输出中的任何地方。

当我尝试将我的库包含在另一个客户端项目中时 @cjol/client ,客户端项目将不会编译。我收到这样的错误:

../core/build/index.d.ts:2:24 - error TS7016: Could not find a declaration file for module 'dep'. '/home/cjol/.../dep/index.js' implicitly has an 'any' type.
Try `npm install @types/dep` if it exists or add a new declaration (.d.ts) file containing `declare module 'dep';`

2 > import { Foo } from "dep";

我也在使用 Yarn 工作区( @cjol/core@cjol/client 都是同一工作区中的包,在 ./core./client 下),但我认为这与这里无关。我需要 @cjol/client输出我的自定义定义文件,但我不知道如何实现它!


编辑 1: 同样,我不确定细节是否相关,但这就是 index.d.ts好像。如前所述,它是由 TypeScript 生成的。

import { Stuff } from "a-typescript-library";
import { Foo } from "dep";

export * from "./my-app-types";

declare type APIResponse<T> = {
/* ... */
};
export declare class API {
/* ... */
}

编辑 2: 这是 dep.d.ts 的内容看起来像:

declare module "dep" {
import Something from "something.js";
export class DepClass {
/* loads of stuff */
}
}

编辑 4:也许是另一种思考我的问题的方式。如果我写了自定义 .d.ts文件,我该如何分发它?我是否需要创建一个包含类型定义的全新包?

最佳答案

不幸的是,typescript 不会将您的自定义 *.d.ts 文件复制到您的输出中。但是,有几种方法可以解决这个问题。

首先,在运行完 tsc 并确保目录结构与原来的匹配后,手动将自定义 *.d.ts 文件复制到输出目录中在 src 目录中。

另一种选择是将dep.d.ts文件重命名为dep.ts文件,并将其包含在需要该类型的模块中。

文件现在名为 dep.ts

declare module "dep" {
import Something from "something.js";
export class DepClass {
/* loads of stuff */
}
}

dep.ts导入到需要它的模块中。

import './types/dep';
import { Foo } from 'dep';

// Rest of your code here

关于typescript - 在编译输出中包含外部类型定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51320163/

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