当前位置: 首页 > 知识库问答 >
问题:

不导入就使用类型和接口

蓬森
2023-03-14

我最近转向打字稿来编写 React Native 应用程序,我注意到的一件事是我可以使用类型而无需导入/导出它们。我已将所有定义文件放在@types文件夹下。

不导出和导入类型是正确的做法吗?

如果我从node_modules/导入一个外部类型(比如ViewTylerfromreact-本机)并在我的界面中使用它,它会在VScode中显示“找不到名称”,我必须导出界面并在需要解决此问题的地方导入它。

我正试图使用最少的进口数量。

共有1个答案

陈开宇
2023-03-14

第一种选择:

您可以使用TS命名空间——这将减少应用程序中的导入量(您不必手动从命名空间导入每个类型)。例如,假设我们有< code>app.namespace.ts文件:

export namespace AppConfig {
  export interface BaseConfig {
    url: string;
    port: number;
  }

  export type MyMap<T> = {
    [key: string]: T;
  }

  export class Settings {
    public p1: boolean;
    public p2: number;
  }
}

用法:

import { AppConfig } from './app.namespace';
// ...
baseConfig: AppConfig.BaseConfig;
myMap: AppConfig.MyMap<number>;
// ...

第二种选择:

只需在项目中创建<code>.d.ts</code>文件(通常每个应用程序子模块都有自己的模型文件,因此您可以在feature文件夹中创建<code>一些feature.d.ts)。在这种情况下,您可以使用d.ts文件中的任何类型,而无需导入。

查看此Stackblitz演示

 类似资料:
  • 问题内容: 这是我的问题和我的项目结构 我有一个要使用的类型 但是,当我尝试将其添加到导入中时,这些问题会出现: 虽然我在函数声明中使用了它 这是什么问题? 我试图用导入 问题答案: 您不能“ 从 包中导入”。您所能做的就是“导入 整个 程序包”。这意味着,如果您和该程序包在开始时就声明自己被称为foo ,则该程序包中的所有内容都必须由以下字符限定: 如果调用了包,则声明变量将使整个包变色:因此,

  • 考虑一个具有的API,如下所示: 很简单,只有页面大小和跳过计数属性。 此外,现在我还有一些类,它们也包含但未分页。 在我的测试中,我希望他们都能实现一个接口,这样我就可以用一些更基本的测试来生成一个通用的基本测试类。为此,我添加了我认为会起作用的内容: 我将PagedResults更改为: 错误 但现在编译器抱怨PagedResultBase继承的所有地方的使用情况(?)从。 但是,如果我将接口

  • 我在许多组件中使用了几个大型对象,因此我为每个大型对象创建了一个proptypes文件,如下所示: 其中包含从"prop类型"导入PropType; 我在组件中使用对象,如下所示: 它给我一个警告,Prop类型“PropLargeObject”无效,它必须是一个函数,通常来自React。道具类型。我做错了什么?

  • 我试图在我的主文件。 entry.ts位于src/js/entry, ts,vue的类型定义位于src/js/lib/baul/vue/type/index.d.ts 编译此文件时,输出如下。顺便说一句,typescript的目标是es6和es6模块。 JQuery工作正常(看起来像),所以我用导入替换了对vue类型定义的引用。 它编译得很好,下面是输出: 问题是没有删除类型定义的import语句

  • 此代码在Java 8中编译,但在Java 7中编译失败: 它不能推断从映射返回的映射的具体类型。空(): 如果将调用更改为f(Map),则会编译。 但是如果您将调用更改为f(Map.empty())。放(1,“A”)。put(2,“B”)) ,它无法在Java 7和8上再次编译。为什么?

  • 什么是SQL和什么是不同的类型?