首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

TypeScript 官方手册翻译计划【十三】:模块

这意味着在一个模块中声明的变量、函数和类等在模块外面是不可见的,除非使用其中一种导出方式将它们显式导出。...反过来,为了使用某个不同的模块中导出的变量、函数、类等,也需要使用其中一种导入方式将它们导入。.../animal.js"; type Animals = Cat | Dog; TypeScript 为 import 语法拓展了两个用途,让它可以声明类型导入: import type 该导入语句只能导入类型.../animal.js"; export type Animals = Cat | Dog; const name = createCatName(); 所有这些都允许诸如 Babel、swc 或者...TypeScript 的模块解析选项 模块解析是一个过程,它指的是 import 或者 require 声明中提取一个字符串,并确定该字符串所指示的文件

1.1K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    TypeScript系列教程十《模块》

    相反,没有任何顶级导入导出声明文件被视为脚本,其内容在全局范围内可用(因此也适用于模块)。 模块在其自身范围内执行,而不是在全局范围内执行。...这意味着模块中声明的变量、函数、类等在模块外不可见,除非使用其中一种导出形式显式导出它们。相反,要使用从不同模块导出的变量、函数、类、接口等,必须使用其中一种导入表单进行导入。...非模块 在开始之前,了解TypeScript认为模块是什么很重要。JavaScript规范声明,任何没有导出或顶级等待的JavaScript文件都应该被视为脚本,而不是模块。...在脚本文件中,变量和类型被声明为在共享全局范围内,并且假设您将使用–outFile编译器选项将多个输入文件连接到一个输出文件中,或者在HTML中使用多个 如果您的文件当前没有任何导入导出,但希望将其视为模块...TypeScript的模块解析选项 模块解析是import或require语句中获取字符串,并确定该字符串引用的文件的过程。 TypeScript包括两种解析策略:Classic和Node。

    1.5K10

    TypeScript 之模块

    相对应的,一个没有顶层导入导出声明文件会被认为是一个脚本,它的内容会在全局范围内可用。 模块会在它自己的作用域,而不是在全局作用域里执行。...这意味着,在一个模块中声明的变量、函数、类等,对于模块之外的代码都是不可见的,除非你显示的导出这些值。 相对应的,要消费一个另一个的模块导出的值、函数、类、接口等,它也需要使用导入的格式先被导入。.../hello.js"; hello(); 复制代码 除了默认导出,你可以通过省略 default 的 export 语法导出不止一个变量和函数: // @filename: maths.ts export...import π 复制代码 你可以接受所有导出对象,然后使用 * as name 把它们放入一个单独的命名空间: // @filename: app.ts import * as math from...TypeScript 模块解析选项(TypeScript’s Module Resolution Options) 模块解析是 import 或者 require 语句中取出字符串,然后决定字符指向的是哪个文件的过程

    1.1K00

    最全面的 Deno 入门教程

    你自己决定如何命名文件夹和文件: mkdir Deno-project cd Deno-project touch index.js 然后在你喜欢的编辑器或 IDE 中打开新创建的 index.js...在 await 语句之后的所有代码仅在 promise 解决后执行。如果这种实现要在函数中运行,则必须把函数声明为异步。...Deno 的标准库 Deno 带有一组实用函数,这些函数被称为 Deno 的标准库(简称:Deno std)。Deno 并没有外部库中导入所有内容,而是尝试通过提供几种内部解决方案来使其可用。...在 Deno 中,所有导入(无论是标准库还是第三方库)均使用指向专用文件的绝对路径来完成。你从这个 以服务器文件形式存在的 http 库[5] 导出一个名为served的函数。...你会注意到需要调整所有导入——在 index.js 和 stories.test.js 中指向该文件,因为文件扩展名 .js 被改为了 .ts。

    3.5K10

    深入理解 TypeScript 模块

    TypeScript 中的模块如何查找的,为什么会隐式查找到index.ts、index.js,为什么会到 node_modules 中去找模块? 如何定义一个全局变量供所有代码共享?...文件模块 ---- 只要一个 JavaScript 文件中包含 imports 导入模块 或者 exports 导出模块 的声明,那它就是一个模块,严谨点应该叫文件模块。...模块的导出 ---- ▐ 6.1 导出声明 任何声明(比如变量,函数,类,类型别名或接口)都能够通过添加 export 关键字来导出。...,TypeScript 会优先选择 .ts 文件而不是 .d.ts 文件 非相对路径 非相对模块的导入,编译器则会包含导入文件的目录开始依次向上级目录遍历,尝试定位匹配的声明文件。...,它就会尝试rootDirs的所有子目录中导入

    2.5K30

    Node.js项目TypeScript改造指南

    本文讲的是如何将一个旧的 Node.js 项目使用 TypeScript 进行改造,包括目录结构调整、TypeScript-ESLint 配置、tsconfig 配置、调试、常见错误处理等。...步骤一、调整目录结构 Node.js 程序,由于对新语法的支持比较快(如async/awaitv7.6.0开始支持),大部分场景是不需要用到 babel、webapck 等编译工具的,因此也很少有编译文件的..."node_modules/**" ], } 步骤三、源码文件调整 将所有.js文件改为.ts文件 这一步比较简单,可以根据自身项目情况,借助 gulp 等工具将所有文件后缀改成ts并提取到src目录...,并不会添加工具类,但会将单个属性导出修改为整个模块导出,并将原来的函数调用表达式修改为成员函数调用表达式。...其实这是针对早期的声明文件,使用了export = mod语法进行导出。因此如果碰上这种声明文件,就使用此种写法。

    4.4K20

    Node.js项目TypeScript改造指南

    本文讲的是如何将一个旧的 Node.js 项目使用 TypeScript 进行改造,包括目录结构调整、TypeScript-ESLint 配置、tsconfig 配置、调试、常见错误处理等。...步骤一、调整目录结构 Node.js 程序,由于对新语法的支持比较快(如async/awaitv7.6.0开始支持),大部分场景是不需要用到 babel、webapck 等编译工具的,因此也很少有编译文件的..."node_modules/**" ], } 步骤三、源码文件调整 将所有.js文件改为.ts文件 这一步比较简单,可以根据自身项目情况,借助 gulp 等工具将所有文件后缀改成ts并提取到src目录...,并不会添加工具类,但会将单个属性导出修改为整个模块导出,并将原来的函数调用表达式修改为成员函数调用表达式。...其实这是针对早期的声明文件,使用了export = mod语法进行导出。因此如果碰上这种声明文件,就使用此种写法。

    4.6K10

    Node.js 项目 TypeScript 改造指南

    本文讲的是如何将一个旧的 Node.js 项目使用 TypeScript 进行改造,包括目录结构调整、TypeScript-ESLint 配置、tsconfig 配置、调试、常见错误处理等。...步骤一、调整目录结构 Node.js 程序,由于对新语法的支持比较快(如async/awaitv7.6.0开始支持),大部分场景是不需要用到 babel、webapck 等编译工具的,因此也很少有编译文件的..."node_modules/**" ], } 步骤三、源码文件调整 将所有.js文件改为.ts文件 这一步比较简单,可以根据自身项目情况,借助 gulp 等工具将所有文件后缀改成ts并提取到src目录...,并不会添加工具类,但会将单个属性导出修改为整个模块导出,并将原来的函数调用表达式修改为成员函数调用表达式。...其实这是针对早期的声明文件,使用了export = mod语法进行导出。因此如果碰上这种声明文件,就使用此种写法。

    8.3K32

    你不知道的 「 import type 」

    背景 TypeScript 3.8 带来了一个新特性:仅仅导入 / 导出声明。 在 上一篇文章 中, 我们使用了这个特性,解决了: 引入类型文件文件不存在的问题。...本文主要内容: 什么是「 仅仅导入 / 导出声明 」 Babel和TypeScript如何一起工作的 正文 首先, 先介绍一下这个特性。...Babel的方法(特别是transform-typescript插件时)是: 先删除类型,然后进行转换。 这样,就即可以使用 Babel 的所有优点,同时仍然能够提供 ts 文件。...混合导入, 混合导出 在这里,我们采用在 types.ts 文件中定义的类型,然后从中重新导出它们。 打开 isolatedModules 时,此代码不会 通过类型检查。...Node 的角度来看,Node 做模块解析时,会发现 types.js 中引入的文件是空的,报错:文件不存在。 如截图所示,tsc 类型检查过程立即将这些模糊的重新导出报告为错误。 2.

    4.3K61

    Typescript真香秘笈

    声明文件一般是在用第三方库的时候才会用到,因为第三方库都是js文件,加上声明文件之后,ts的编译器才能知道第三库暴露的方法、属性的类型。...: any; } export 导出变量 在声明文件中只要用到了export、import就会被视为模块声明文件。模块声明文件中的declare关键字不能声明全局变量。...// 整体导出 module.exports = foo; // 单个导出 exports.bar = bar; 在 ts 中,针对这种模块导出,有多种方式可以导入,第一种方式是 const ......它的原理是对node进行了一层封装,在require ts模块的时候,先调用tsc将ts文件编译成js文件然后再用node执行。...给js文件附加.d.ts类型声明文件,特别是一些通用的函数或者组件,这样在ts文件中使用到这些函数或者组件时,编辑器会有只能提示,tsc也会根据声明文件中的类型进行校验。

    5.6K20

    去除typescript代码类型

    "removeComments": true, // 删除编译后的所有的注释 "noEmit": true, // 不生成输出文件 "importHelpers": true, // ...tslib 导入辅助工具函数 "isolatedModules": true, // 将每个文件做为单独的模块 (与 'ts.transpileModule' 类似). /* 严格的类型检查选项...*/ "strict": true, // 启用所有严格类型检查选项 "noImplicitAny": true, // 在表达式和声明上有隐含的 any类型时报错 "strictNullChecks...有未使用的变量时,抛出错误 "noUnusedParameters": true, // 有未使用的参数时,抛出错误 "noImplicitReturns": true, // 并不是所有函数里的代码都有返回值时..."types": [], // 需要包含的类型声明文件名列表 "allowSyntheticDefaultImports": true, // 允许从没有设置默认导出的模块中默认导入

    2.6K10

    如何将Node.js库转换到Deno

    如果导入路径是一个目录,则导入index.js文件 Deno模块解析逻辑简化了很多。它使用了ECMAScript模块语法进行导入导出。该语法也被TypeScript使用。...Node.js可以直接运行编译后的文件 本文下面将讨论如何TypeScript文件修改为Deno可以直接使用的格式 依赖 edgedb-js没有任何第三方依赖,所以这里不必担心任何三方库的Deno兼容性问题...但仍需要将所有Node.js标准库中导入(例如path、fs等)替换为等价的Deno文件 注意:如果你的包确实依赖于外部包,可在deno.land/x中查看是否有Deno版本 由于Deno标准库提供了...只要确保这些文件重新导出相同的功能就能符合预期 但实际上应该如何重写这些导入呢。这里我们需要开发一个简单的codemod脚本。...虽然可以简单地适配器导出这些变量,但我们必须重构Node.js文件以显式地导入它们。

    2.4K30

    TypeScript 5.0 正式发布!

    严格来说,前者被解释为一个名为 app.css.js 的 JavaScript 文件声明文件。...TypeScript 的 JavaScript emit 策略也有另外几层复杂性——省略导入并不总是由如何使用 import 驱动的,它通常还会参考值的声明方式。...但是,如果 Car 仅声明为类型别名或接口,则 JavaScript 文件不应导出 Car。 虽然 TypeScript 可能能够根据来自跨文件的信息做出这些发出决策,但并非每个编译器都可以。...在此标志下,当设置或文件扩展名暗示不同的模块系统时,ECMAScript 导入导出不会被重写为 require 调用。相反,会得到一个错误。...TypeScript 现在默认检测大小写。这意味着 TypeScript 和 ESLint 等工具通常不会就如何最好地对导入进行排序而相互“斗争”。 这些选项最终可能由编辑器配置。

    3.9K70

    会写 TypeScript 但你真的会 TS 编译配置吗?

    如果是有自动导出类型定义文件的需求,才需要搞这一套插件~ (7). rootDir & outDir rootDir:指定 TypeScript 识别读取的根目录,用于所有声明输入文件的最长公共路径...tslib 库引入语法降级辅助函数,以避免重复冗余的辅助函数声明。..."removeComments": true, // 删除编译后的所有的注释 "noEmit": true, // 不生成输出文件 "importHelpers": true, // ..."types": [], // 需要包含的类型声明文件名列表 "allowSyntheticDefaultImports": true, // 允许从没有设置默认导出的模块中默认导入。...4.3 Babel + TypeScript Babel 处理 TS 需要安装 @babel/preset-typescript 模块,然后在 babel 项目配置文件声明: // 配置说明:https

    3.7K41

    TypeScript 5.0 现已发布:全新的装饰器,速度、内存和包大小优化

    Rosenwasser 还谈到 TypeScript 中关于 enums 的老问题,5.0 beta 版如何解决其中部分问题,同时减少了声明各类 enums 时所需理解的概念数量。...构造函数推断类属性 TypeScript 5.0 引入了将 const 修饰符添加至类型参数声明的功能,也就是默认做 const-like 推断。...支持 export type * TypeScript 5.0 提供新的“导出类型”功能,能够在重新导出的语句中添加对仅类型导入的支持,例如 export from “module” 和 export...在 main.ts 当中,重新导出的 vehicles 命名空间被导入,并用于对 takeASpaceship 函数中的参数进行类型检查。...但请注意,在 makeASpaceship 函数中创建新的 Spaceship 对象会导致错误,因为 vehicles 命名空间是作为仅类型导入进行导出的,不可用作值。

    94810
    领券