TypeScript 学习笔记(1)

TypeScript简介

        TypeScript是微软开发的一种免费的开源编程语言。它是JavaScript的超集,本质上是给这种语言添加可选的静态类型和基于类的面向对象编程。

        类型脚本扩展了JavaScript的语法,因此任何现有的JavaScript程序都可以在类型脚本下工作,而无需更改。TypeScript是为大规模应用程序开发而设计的,它生成JavaScript以保证编译时的兼容性。

TypeScript支持将类型信息的头文件添加到现有的JavaScript库中,这将它的优势扩展到了流行的库,如jQuery、MongoDB、Node.js和D3.js

        学习一门语言,首先得把环境弄起来:

* 安装npm:

        我就懒得自己写流程,我也是跟着网上的流程做的:npm安装教程 - 每天进步多一点 - 博客园

遇到的问题就是:运行npm install -g typescript 报错 :

原因:1 没有将node_global,node_modules 设置到环境变量path, 2 没有以管理员的身份运行cmd

*安装TypeScript:

安装完成后npm install -g typescript通过这个命令就可以下载安装TypeScript Compiler了

*选择开发工具:

Visual Studio Code (VS Code) 是微软开发的、免费开源、功能强大的轻量级的IDE。

* TypeScript 入门,构建项目的基础知识:

*TypeScript class(类):

*TypeScript modules (模块):

        模块是一种创建一组相关变量、函数、类和接口等的方法。它在本地范围内执行,而不是在全局范围内执行。换句话说,在模块中声明的变量、函数、类和接口不能在模块外部直接访问。我们可以使用export关键字创建模块,也可以在其他模块中使用import关键字。

        模块通过使用模块加载器导入另一个模块。在运行时,模块加载器负责在执行模块之前定位和执行模块的所有依赖项。JavaScript中最常用的模块加载器是用于Node.js的CommonJS模块加载器和用于Web应用程序的require.js模块加载器。

      内部模块在Typescript的早期版本中。它用于将类、接口、函数和变量逻辑分组成一个单元,并可以导出到另一个模块中。模块在最新版本的TypeScript中被命名为命名空间。所以今天,内部模块已经过时了。但是在内部模块上使用名称空间仍然支持它们。

早期版本:

module Validation {
    export interface StringValidator {
        isAcceptable(s: string): boolean;
    }

    var lettersRegexp = /^[A-Za-z]+$/;
    var numberRegexp = /^[0-9]+$/;

    export class LettersOnlyValidator implements StringValidator {
        isAcceptable(s: string) {
            return lettersRegexp.test(s);
        }
    }

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

// 针对以下集合中的字符串做一些简单的测试
var strings = ['Hello', '98052', '101'];
// 使用验证器
var validators: { [s: string]: Validation.StringValidator; } = {};
validators['ZIP code'] = new Validation.ZipCodeValidator();
validators['Letters only'] = new Validation.LettersOnlyValidator();
// 展示每个字符串通过验证器后的结果
strings.forEach(s => {
    for (var name in validators) {
        console.log('"' + s + '" ' + (validators[name].isAcceptable(s) ? ' matches ' : ' does not match ') + name);
    }
});

ECMAScript 2015内部模块语法:

namespace Validation {   
   export interface StringValidator {
        isAcceptable(s: string): boolean;
    }
    ...
}  

        1.  拆分 文件:有时候一个模块的代码太长,在同一个文件的话,上千行,万行的代码,不利于管理和阅读,我们可以把它拆分成多个文件,但是他们还是属于同一个文件。

       2. 编译输出和加载:

一旦有多个文件参与项目,我们得确保所需编译的代码是否都已加载,有两种方式可以实现。

        1)合并编译输出到一个js 文件:

tsc --out your.js Validation.ts LettersOnlyValidator.ts ZipCodeValidator.ts Test.ts

        2)分别编译输出对应的js文件,再有序的加载:

<script src="Validation.js" type="text/javascript"></script />
<script src="LettersOnlyValidator.js" type="text/javascript"></script />
<script src="ZipCodeValidator.js" type="text/javascript"></script />
<script src="Test.js" type="text/javascript"></script />

      3.外部模块:

        外部模块也称为模块。当应用程序包含数百个文件时,如果没有模块化方法,几乎不可能处理这些文件。外部模块用于指定多个外部js文件之间的加载依赖关系。如果应用程序只有一个js文件,那么外部模块就不相关。ECMAScript 2015(ES6)模块系统将每个文件视为一个模块。

        1)模块的声明:使用export来声明一个模块

        例如,addition.ts:

export class Addition{  
    constructor(private x?: number, private y?: number){  
    }  
    Sum(){  
        console.log("SUM: " +(this.x + this.y));  
    }  
}  

       2)在test.ts中访问使用Addition模块:

import {Addition} from './addition';  
  
let addObject = new Addition(10, 20);   
  
addObject.Sum(); 

     3)在一个文件中导入多个模块 

import { export_name1, export_name2 } from 'module_name'; 

    4)编译和执行多个模块

$ tsc --module commonjs app.ts  
$ node ./app.js 

    5)重新导出:

        Module.ts:

export class Addition{  
    constructor(private x?: number, private y?: number){  
    }  
    Sum(){  
        console.log("SUM: " +(this.x + this.y));  
    }  
}  

        re-export .ts:

// 从模块文件中重新导出Addition as plus
export { Addition as plus } from "./Modules";  

 test.ts: 测试导入转口文件中的模块

//从转口文件导入导出类型  
import {plus as Addition} from './re-exports';  //导入plus as Addition  
  
let addObject = new Addition(10, 20);   
  
addObject.Sum(); 

注意:内部模块在最新版本的TypeScript中被命名为命名空间,而外部模块简称模块。

命名空间和模块的区别:

命名空间:内部模块,主要用于组织代码,避免命名冲突。

模块: ts的外部模块的简称,侧重代码的复用,一个模块里可能会有多个命名空间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值