zoukankan      html  css  js  c++  java
  • typescript

    我们可以把一些公共的功能单独抽离成一个文件作为一个模块。
    模块里面的变量 函数 类等默认是私有的,如果我们要在外部访问模块里面的数据(变量、函数、类),
    我们需要通过export暴露模块里面的数据(变量、函数、类...)。
    暴露后我们通过 import 引入模块就可以使用模块里面暴露的数据(变量、函数、类

    模块是自声明的;两个模块之间的关系是通过在文件级别上使用importsexports建立的。

    导出

    导出声明

    任何声明(比如变量,函数,类,类型别名或接口)都能够通过添加export关键字来导出。

    export interface StringValidator {
        isAcceptable(s: string): boolean;
    }
    
    export const numberRegexp = /^[0-9]+$/;
    
    export class ZipCodeValidator implements StringValidator {
        isAcceptable(s: string) {
            return s.length === 5 && numberRegexp.test(s);
        }
    }
    

    导出语句

    class ZipCodeValidator implements StringValidator {
        isAcceptable(s: string) {
            return s.length === 5 && numberRegexp.test(s);
        }
    }
    export { ZipCodeValidator };
    export { ZipCodeValidator as mainValidator };
    

    导入

    模块的导入操作与导出一样简单。 可以使用以下 import形式之一来导入其它模块中的导出内容。

    导入一个模块中的某个导出内容

        import { ZipCodeValidator } from "./ZipCodeValidator";
    
        let myValidator = new ZipCodeValidator();
    

    可以对导入内容重命名

        import { ZipCodeValidator as ZCV } from "./ZipCodeValidator";
        let myValidator = new ZCV();
    

    将整个模块导入到一个变量,并通过它来访问模块的导出部分

        import * as validator from "./ZipCodeValidator";
        let myValidator = new validator.ZipCodeValidator();
    

    具有副作用的导入模块

    尽管不推荐这么做,一些模块会设置一些全局状态供其它模块使用。 这些模块可能没有任何的导出或用户根本就不关注它的导出。 使用下面的方法来导入这类模块:

        import "./my-module.js";
    

    默认导出

    每个模块都可以有一个default导出。 默认导出使用 default关键字标记;并且一个模块只能够有一个default导出。 需要使用一种特殊的导入形式来导入 default导出。

    default导出十分便利。 比如,像JQuery这样的类库可能有一个默认导出 jQuery$,并且我们基本上也会使用同样的名字jQuery$导出JQuery。

    JQuery.d.ts

    declare let $: JQuery;
    export default $;
    

    App.ts

    import $ from "JQuery";
    
    $("button.continue").html( "Next Step..." );
    

    类和函数声明可以直接被标记为默认导出。 标记为默认导出的类和函数的名字是可以省略的。
    StaticZipCodeValidator.ts

    const numberRegexp = /^[0-9]+$/;
    
    export default function (s: string) {
        return s.length === 5 && numberRegexp.test(s);
    }
    

    Test.ts

    import validate from "./StaticZipCodeValidator";
    
    let strings = ["Hello", "98052", "101"];
    
    // Use function validate
    strings.forEach(s => {
      console.log(`"${s}" ${validate(s) ? " matches" : " does not match"}`);
    });
    

    default导出也可以是一个值

    OneTwoThree.ts

    export default "123";
    

    Log.ts

    import num from "./OneTwoThree";
    
    console.log(num); // "123"
    

    export = 和 import = require()

    CommonJS和AMD的环境里都有一个exports变量,这个变量包含了一个模块的所有导出内容。
    CommonJS和AMD的exports都可以被赋值为一个对象, 这种情况下其作用就类似于 es6 语法里的默认导出,即 export default语法了。虽然作用相似,但是 export default 语法并不能兼容CommonJS和AMD的exports

    为了支持CommonJS和AMD的exports, TypeScript提供了export =语法。

    export =语法定义一个模块的导出对象。 这里的对象一词指的是类,接口,命名空间,函数或枚举。

    若使用export =导出一个模块,则必须使用TypeScript的特定语法import module = require("module")来导入此模块。

    let numberRegexp = /^[0-9]+$/;
    class ZipCodeValidator {
        isAcceptable(s: string) {
            return s.length === 5 && numberRegexp.test(s);
        }
    }
    export = ZipCodeValidator;
    

    test.ts

    import zip = require("./ZipCodeValidator");
    
    // Some samples to try
    let strings = ["Hello", "98052", "101"];
    
    // Validators to use
    let validator = new zip();
    
    // Show whether each string passed each validator
    strings.forEach(s => {
      console.log(`"${ s }" - ${ validator.isAcceptable(s) ? "matches" : "does not match" }`);
    });
    

    案例

  • 相关阅读:
    解决百度网盘倍速需要会员问题
    npm run dev其实就是vue-cli-service serve
    git常见操作和git原理
    ajax promise三种状态
    ajax get请求
    vue2.0x methods中一个函数调用另外一个函数
    Web前端开发规范之文件存储位置规范
    大数据应用期末总评
    分布式文件系统HDFS 练习
    安装Hadoop
  • 原文地址:https://www.cnblogs.com/tangge/p/10837268.html
Copyright © 2011-2022 走看看