gpt4 book ai didi

typescript - 在 @types 命名空间下将自定义 typescript 类型作为 NPM 包 *NOT* 使用

转载 作者:行者123 更新时间:2023-12-04 10:14:41 24 4
gpt4 key购买 nike

在我的公司,我们希望针对 GraphQL API 自动生成我们的类型,并将它们打包成一个包,我们可以为所有使用 API 而不是依赖复制意大利面的客户提供服务。我一直在阅读 TypeScript 文档,对于如何将这些自定义类型告诉 TypeScript 有点困惑。

根据我的阅读,TypeScript 会自动查找 node_modules/@types/* .不幸的是,因为这是内部 API,我们不想在 DefinitiveTyped 存储库下发布(我还没有发现你不能显式编写和 @types/package 并且它是一个私有(private)模块)。所以无论如何,这意味着无论我们如何命名我们的包,TypeScript 都不会自动查看。

我读到了typestypeRoots认为这些可能是我需要使用的选项。从我的阅读types是我可以指定 @types 的一种方式我希望 TypeScript 包括一种 cherry-pick 选项。 typeRoots似乎是我应该使用的;但是它说仅限 此选项下的软件包将被包括在内。我的假设是我需要执行以下操作(我们仍然需要 @types 下的定义):

{
"compilerOptions": {
"typeRoots": ["node_modules/@types", "node_modules/@companyOrg/customTypings"]
}
}

有没有人在做类似的事情并找到一种方法让 TypeScript 包含不在 @types 下的自定义类型?伞?请注意,我不是在谈论创建 custom.d.ts在项目目录中,但使用类似于 @types/react 的 NPM 包除了 @company/our-types 之类的东西.

当前 tsconfig.json :
{
"compilerOptions": {
"target": "es5",
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "preserve",
"preserveSymlinks": true,
"typeRoots": [
"node_modules/@types",
"node_modules/@companyOrg/customTypings",
],
},
"include": [
"src"
],
}

我也在本地工作,所以我使用了 yarn link @company/our-types也许这就是问题的根源。我已经检查了几次路径,但一切似乎都很好。

最佳答案

让我展示一个对我有用的例子。
有 2 个包:类型(可以是任何名称)和消费者。
类型包包含我的类型,形式为 d.ts文件,我有 index.d.ts在根目录中(此文件按惯例用作入口点,但可以使用 package.json 中的 types 字段重新定义)

// types/index.d.ts
declare namespace MyLib {
interface MyInterface {
id: string;
}
}

export = MyLib;

我做 npm 链接 types进入 consumer并添加 "types": "*"dependencies的消费者。
{
"name": "consumer",
"version": "1.0.0",
"dependencies": {
"typescript": "^3.8.3",
"types": "*" // <----
}
}

之后我可以使用从 types 导出的类型在 consumer :
// consumer/index.ts
import { MyInterface } from "types";

const y: MyInterface = { id: "1" };

它有效,因为 TS 正在寻找 types definitions在所有依赖项中,并允许您在没有任何额外配置的情况下使用它们。

关于typescript - 在 @types 命名空间下将自定义 typescript 类型作为 NPM 包 *NOT* 使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61132757/

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