TypeScript学习摘要(九)——模块和命名空间

  • 模块与命名空间(内部模块)类似,不同的是模块可以声明它的依赖

  • 模块

    es6的模块语法与CommonJS和AMD环境不兼容,TypeScript提供了export =语法用于支持该环境

    // 通过以下语法规则可兼容 CommonJs与AMD环境
    export = ZipCodeValidator;
    import zip = require("./ZipCodeValidator");
    

    .d.ts文件是外部模块声明,用于作为外部模块被引用时的解析

  • 命名空间

    命名空间用于组织模块内部代码

    // Validation.ts
    namespace Validation {
        export interface StringValidator {
            isAcceptable(s: string): boolean;
        }
    }
    // 多个文件可以使用同一个命名空间,通过引用标签声明依赖关系
    // LettersOnlyValidator.ts
    /// <reference path="Validation.ts" />
    namespace Validation {
        const lettersRegexp = /^[A-Za-z]+$/;
        export class LettersOnlyValidator implements StringValidator {
            isAcceptable(s: string) {
                return lettersRegexp.test(s);
            }
        }
    }
    

模块解析

  • 模块引用分为相对的与非相对的

    • 相对导入是以/./../开头的
      • import Entry from "./components/Entry";
      • import { DefaultHeaders } from "../constants/http";
      • import "/mod";
    • 其他形式都是非相对
      • import * as $ from "jQuery";
      • import { Component } from "@angular/core";
    • 模块解析具体规则
  • 路径映射

    • TypeScript编译器通过使用tsconfig.json文件里的"paths"来支持这样的声明映射(取别名)

      {
        "compilerOptions": {
          "baseUrl": ".", // This must be specified if "paths" is.
          "paths": {
            "jquery": ["node_modules/jquery/dist/jquery"] // 此处映射是相对于"baseUrl"
          }
        }
      }
      

      "paths"是相对于"baseUrl"进行解析

      {
        "compilerOptions": {
          "baseUrl": ".",
          "paths": { // 将多个模块集中至一处
            "*": [
              "*",
              "generated/*"  // <baseUrl>/generated/<moduleName>
            ]
          }
        }
      }
      
  • rootDirs虚拟目录

    • 每当编译器在某一rootDirs的子目录下发现了相对模块导入,它就会尝试从每一个rootDirs中导入

JavaScript文件类型检查

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容