如何在打字稿中正确导入自定义类型

Posted

技术标签:

【中文标题】如何在打字稿中正确导入自定义类型【英文标题】:How to correctly import custom types in typescript 【发布时间】:2020-08-02 02:27:18 【问题描述】:

我在src/@types/app.d.tsexport type AuthKeyT = string)中有自定义类型

我想在 tsx 反应文件中使用它(使用 import AuthKeyT from '@types/app'),但我收到一个错误:

无法导入类型声明文件。考虑导入 'app' 而不是 '@types/app'

所以,当我使用 import AuthKeyT from 'app' 时,我得到:

找不到模块“应用程序”。

那么..怎么了?我应该如何导入自定义类型?

我在反应应用程序中使用打字稿3.7.2

【问题讨论】:

【参考方案1】:

正如错误所说,您无法在 TypeScript 中导入 .d.ts 文件。

import ... from 'app' 隐含的意思是import ... from 'app.ts' 或者这个文件不存在所以你得到第二个错误。

如果你想通过这个导入来使用你的类型,你必须把它们写在一个简单的.ts 文件中:

src/@types/app.ts:

export type AuthKeyT = string

使用此结构,您将能够使用以下方法导入此类型:

import  AuthKeyT  from 'app'

【讨论】:

在哪些情况下使用.d.ts文件? 如果你有一个app.ts 模块,你将在app.d.ts 中编写他的类型定义。所以当你import ... from 'app' 时,TypeScript 也会“导入”定义文件,因为它与模块同名。 什么情况下使用 ==> import type somthing from './typefile' ; 在我的情况下,通过从文件夹名称中删除 @,我能够导入而不会显示错误。前任。 src/types/config.ts【参考方案2】:

您遇到此错误是因为 @types/... 是全局导入。例如import AuthKeyT from '@types/app' 表示您正在尝试从 node_modules 中的 @types 导入。

您可以通过将@types 更改为@customTypes 或在导入时更改类型文件夹的路径(例如@src/types...)来解决此问题。

【讨论】:

以上是关于如何在打字稿中正确导入自定义类型的主要内容,如果未能解决你的问题,请参考以下文章

如何将方法的泛型类型限制为打字稿中的对象?

打字稿中的全局类型

如何在打字稿中定义一个常量数组

如何从打字稿中的标记联合类型中提取类型?

尝试添加自定义属性时使用情感/样式在打字稿中收到错误

打字稿中的样式组件“as”道具和自定义道具