30分钟速成TypeScript

简介: 30分钟速成TypeScript

一、TypeScript 是什么?


TypeScript 是 JavaScript 的超集,在 JavaScript 的基础上增加了类、模块、接口、泛型和静态类型(可选)等常见的概念。


从编程语言的动、静来区分,TypeScript属于静态类型的编程语言,JS属于动态类型的编程语言,静态类型是编译期做类型检查,动态类型是执行期做类型检查。


所有 JavaScript 代码都是有效的 TypeScript 代码,任何 JavaScript 项目都可以无缝引入 TypeScript,TypeScript 编译器最终会把 TypeScript 代码编译成 JavaScript 代码。


本文只关注 TypeScript 额外增加的区别于 JavaScript 的语法。


二、为什么要使用TypeScript


1、OOP面向对象特性

TypeScript 对于 OOP(面向对象程序设计) 背景的人来说感觉应该熟悉,其实开发 TypeScript 的工程师正是领导 C# 开发的微软工程师,但工程师们谨慎地只借用了对 TypeScript 有意义的特性,TypeScript 其实它更像 JavaScript 本身。


2、提高了开发效率

不可否认,一个 TypeScript 项目将会比同等的 JavaScript 代码有更多的行数,但是它有助于描述你正在操纵的数据,从而降低了整体的认知成本。它 通过减少记忆成本和消除打开不相关的文件手动检查类型来提高开发速度。


三、TypeScript 详细介绍


1、布尔类型

let isVisable: boolean = false;


2、数值类型

let count: number = 20;


3、字符串类型

let name: string = 'xiaowang';

如果不知道是什么类型,可以使用 “any” (任意)类型

let sure: any = 5;
sure = '重新赋值转换为字符串类型';
sure = false;       // 还可以重新定义为布尔类型


4、常量

使用 const 关键字将一个字面量修饰为常量。

const num = 9;
num = 1;      // 常量不能重新被赋值,这里会报错


5、数组

TypeScript 中的数组有两种表示形式,一种是有类型的数组,另一种是泛型数组。

有类型的数组:

// 
let list: number[] = [1, 2, 3];


泛型数组:

let list: Array<number> = [1, 2, 3];


6、枚举

enum Color {Red, Green, Blue}
let c: Color = Color.Green;


7、 void 关键词

它用于表明函数没有任何返回值的情况:

function Alert(): void {
  alert('我是弹出框!');
}


8、函数

支持使用 lambda 胖箭头表达式和类型推断

一般的函数

let fun1 = function(n: number): number { return n * n; }
• 1

根据返回值推断函数返回类型

let fun2 = function(n: number) { return n * n; };

胖箭头表达式

let fun3 = (n: number): number => { return n * n; };

根据返回值推断返回类型的胖箭头表达式

let fun4 = (n: number) => { return n * n; };

根据返回值推断返回类型的胖箭头表达式,省略花括号的同时,可以同时省去 return 关键字

let fun4 = (i: number) =>  i * i;


9、接口

接口是结构化的,任何具备接口中声明的全部属性的对象,都与该接口兼容。

interface Student {
  name: string;
  age?: number;    // 使用 "?" 标识,表明该属性是一个非必需属性
  move(): void;    // 函数
}

实现 “Student” 接口的对象,当它具备 “name” 属性和 “move” 方法之后可被视为一个 “Student”

let p: Student = { name: 'xaioming', move: () => {} };

带可选属性的对象

let smallStudent: Student = { name: 'xaioming', age: 5, move: () => {} };

下例由于该对象 “age” 属性的类型不是 “number” ,所以不是一个 “Student”

let invalidStudent: Student = { name: 'Bobby', age: true };

接口也可以描述一个函数的类型

interface FindFunc {
  (source: string, subString: string): boolean;
}

参数名并不重要,参数类型才重要

let myFind: FindFunc;
myFind = function(src: string, sub: string) {
  return src.search(sub) !== -1;
};


10、类

类成员访问权限默认都是公共的 (public).

类构造函数- 在类构造函数中使用 public/private 关键字修饰的变量,会被声明为类的成员属性。

下例:age 会像 name 一样被声明定义为类成员属性,而不再需要额外代码。

class Student {
  name: string;   // 成员属性
  constructor(name:string, public age: number=1) {
    this.name = name;
  }
  // 成员函数
  move() { retun this.age++;}
  // 静态成员
  static normal = new Student('xiaoming', 10);
}
let p1 = new Student('xiaowang', 12);
let p2 = new Student('xiaoxi');      // age 为构造器中指定的默认值:1


类的继承

class BigStudent extends Student {
  constructor(name:string,  age: number, public major:string="计算机") {
    super(name, age); // 必须显式调用父类的构造函数
  }
  // 重写父类中的 dist() 函数
  dist() {
    let d = super.dist();
    return d+d;
  }
}


11、模块

模块 “.” 符号可以作为子模块的分隔符:

module Geometry {
  export class Square {
    constructor(public length: number = 0) {
    }
    area() {
      return Math.pow(this.length, 2);
    }
  }
}
let s1 = new Geometry.Square(6);

为模块创建一个本地别名:

import G1 = Geometry;
let s2 = new G1.Square(2);


12、 泛型

类泛型

class Student<T1, T2> {
  constructor(public param1: T1, public param2: T2) {
  }
}

接口泛型

interface Student<T> {
  param1: T;
  param2: T;
}

函数泛型

let student2 = function<T>(p: Student<T>) {
  return new Student(p.param1, p.param2);
};
let tuple = student2({ param1: 'hello', param2: 'world'});


13、模板字符串

使用反引号的字符串

// 嵌入变量的模板字符串
let name = 'wangming';
let greeting = `Hi ${name}, how are you?`;
// 有多行内容的模板字符串
let multiline = `This is an example
of a multiline string`;


14、引用定义文件

<reference path="jquery.a.ts" />

参考资料:



相关文章
|
1月前
|
存储 JavaScript
TypeScript三
在 TypeScript 中,数组可以通过类型定义,如 `number[]` 或 `string[]`。示例展示了数字和字符串数组的声明与访问。数组解构允许将数组元素赋值给多个变量。通过 `for...in` 循环可遍历数组。多维数组如 `number[][]` 存储嵌套数组。数组方法包括:`concat()` 连接数组,`every()` 检查所有元素是否满足条件,`filter()` 过滤符合条件的元素,`forEach()` 对每个元素执行回调,`indexOf()` 查找元素位置,`join()` 将数组转为字符串,`map()` 应用函数于每个元素并返回新数组
|
22天前
|
JavaScript
|
22天前
|
自然语言处理 JavaScript
typescript let
typescript let
|
1月前
|
JavaScript 前端开发
TypeScript二
JavaScript Number对象包含多种方法,如`toExponential()`将数值转化为指数形式,`toFixed()`保留指定位数的小数,`toLocaleString()`按本地格式显示数字,`toPrecision()`格式化数字到指定长度,`toString()`以指定基数表示数字,而`valueOf()`返回原始数值。此外,示例中还展示了Date对象的格式化方法。对于String对象,有`constructor`返回创建对象的函数,`length`获取字符串长度,`prototype`用于扩展对象,以及一系列如`charAt()`、`indexOf()
|
10月前
|
JavaScript
【TypeScript理解】
【TypeScript理解】
|
JavaScript 前端开发 安全
快速了解 TypeScript
快速了解 TypeScript
|
JavaScript
初识 TypeScript 一。
初识 TypeScript 一。
初识 TypeScript 一。
|
Rust JavaScript 前端开发
C# 是 TypeScript 的最佳替补?
C# 是 TypeScript 的最佳替补?
220 0
C# 是 TypeScript 的最佳替补?