TS 总结

1.TS概念

TypeScript是JavaScript类型的超集(当前我们处于ES5),它可以编译成纯JavaScript。

TypeScript给JavaScript加上可选的类型系统,给JavaScript加上静态类型后,就能将调试从运行期提前到编码期,诸如类型检查、越界检查这样的功能才能真正发挥作用。 TypeScript的开发体验远远超过以往纯JavaScript的开发体验,无需运行程序即可修复潜在bug。

总的来说,Typescript是拥有类型的javascript超级,它可以编译成普通,干净,完整的javascript代码。

2.语法

  • 同JS一样,TS也要区分大小写;
  • TS会忽略程序中出现的空格、制表符和换行符;
  • 单行注释://;多行注释/**/

3.变量

  • 不使用var,使用let或const申明变量,并加上类型说明,且作用域为块级即以{}为界
* let lang: string = 'TypeScript';//如果省略类型说明,TS也可进行自动推断
* lang = 1010;//error! 如果需要可以使用联合类型:let lang: number | string = 'TS';
* let age: number = 89;
* let age = 64;//error!

* const pi: number = 3.14159;//pi以后不可改变,类似常量
* pi = 3.14;//error!

4.类

4.1类的定义和使用

类是属性(有些什么)和函数(能干什么)的集合,是生成对象(Object)或类实例的模板。

//类的定义和使用
class MyInfo { //class是关键字,类名默认全部大写首字母
name: string; //属性
weather: string; //属性
constructor(name: string, weather: string){ //构造函数,一般用于初始化。如果没有,TS会自动生成一个,以备用new创建类实例时调用。
* this.name = name;
* this.weather = weather;
* }
* printInfo(): void { //其它函数,无返回值
* console.log(`Hello, ${this.name}.`);
* console.log(`Today is ${this.weather}.`);
* }
* }
* let myData = new MyInfo('QiGe', 'raining'); //使用new关键字生成对象,即该类的实例
* myData.printInfo();

4.2 类的属性和函数的访问权限

类中的属性和函数都有访问权限,默认为public即全局可访问,其次为protected即可在类的内部和其子类的内部可访问,最后为private,只能在该类内部可访问。

* //访问权限
* class MyInfo { //class是关键字,类名默认全部大写首字母
* public name: string; //public属性,可省略
* private _weather: string; //私有属性,习惯以_开头进行命名
* constructor(name: string, weather: string){ //构造函数,一般用于初始化
* this.name = name;
* this._weather = weather;
* }
* printInfo(): void { //其它函数
* this._test();
* console.log(`Hello, ${this.name}.`);
* console.log(`Today is ${this._weather}.`);
* }
* private _test(): void {
* console.log('You can not call me outside!');
* }
* }
* let myData = new MyInfo('QiGe', 'raining'); //使用new关键字生成对象
* console.log(myData._weather); //error!
* myData._test(); //error
* myData.printInfo();

4.3 存取器-getter、setter

当在类外部时,建议设置getter和setter操作其private属性,即使public属性也如此。

//getter和setter
class MyInfo { //class是关键字,类名默认全部大写首字母
  private readonly _name: string; //私有属性,外部不可访问。readonly使其只能在初始化时赋值,以后不可更改。    
  private _weather: string; //私有属性,习惯以_开头进行命名

  constructor(name: string, weather: string){ //构造函数,一般用于初始化
    this._name = name;
    this._weather = weather;
  }
  get name(): string {
    return this._name;
  }
  set name(value: string) {  //error! _name有readonly属性
    this._name = value;
  }
  get weather(): string {
    return this._weather;
  }
  set weather(value: string) {
    this._weather = value;
  } 
}
  
let myData = new MyInfo('QiGe', 'raining'); //使用new关键字生成对象
console.log(myData.name, myData.weather);
myData.weather = 'sunny'; //OK
myData.name = 'Wang'; //error!
console.log(myData);

4.4 静态属性

类中的属性或函数有static修饰,则可直接使用而不需要实例化

//静态属性,内建或自定义,无需new即可使用
* console.log(Math.round(89.64)); //90
* console.log(Math.pow(2, 8)); //256
* class MyStaticClass {
* static place = 'Earth';
* static printInfo() {
* console.log('We have only one Earth!');
* }
* }
* console.log(MyStaticClass.place);
* MyStaticClass.printInfo();

5.解构

将对象、数组中的元素拆分到指定变量中,以方便使用

  • 解构数组

    • 解构赋值
      let data = [1,11,111];
      let [first,second,third] = data;
      let first = data[0];
      let second = data[1];
      let third = data[2]; 
    
    • 作用于函数参数
      function functionname ([first,second,third]:[number,number,number])
      {
       console.log(first);
       console.log(second);
       console.log(third);
      }
      functionname(data);
    
  • 解构对象

    • 解构赋值
     let str = {
     a:"i"
     b:"am"
     c:"yyds"
     };
     let {b,c} = str;
    
    • 指定类型
     let {b,c}:{b:string,c:string} = str;
    

6.数组

  • 数组的定义

1.方法一:

var arrayname[:datatype];
arrayname = [data1,data2,data3];

2.方法二:

var arrayname:number[] =  [1,11,111]

3.方法三:

var arrayname:Array <number> = [1,11,111]

4.方法四:

let arrayname:[number,string] = [1,'yyds yyd yy s']

7.函数

完整函数类型定义

//命名函数,有完整的参数和返回类型。可以不用,TS将自动进行类型推断但推荐使用!
 function add(x: number, y: number): number {
 return x + y;
 }
 //匿名函数
 let myAdd = function(x: number, y: number): number { return x + y; };
 console.log(myAdd(1, '2'));//error
 console.log(myAdd(1));//error
 console.log(typeof myAdd(1, 2));//number

可选参数

 //可选参数,必须放在必要参数后
function greeting(firstName: string, lastName?: string) {
 if(lastName)
 return `Hello ${firstName} ${lastName}!`;
 }
 return `Hello ${firstName}!`;
 }
 console.log(greeting('QiGe'));
 console.log(greeting('QiGe', 'Wang'));
 console.log(greeting('QiGe', 'Wang', 'Yong'));//error!

默认参数

//默认参数,不必在必要参数后
function greeting(firstName: string, lastName = 'Wang') {
return `Hello ${firstName} ${lastName}!`;
 }
 console.log(greeting('QiGe'));
 console.log(greeting('QiGe', 'HaHaHa'));
 console.log(greeting('QiGe', 'HaHaHa', 'Yong'));//error!

剩余参数

必要参数,默认参数和可选参数有个共同点:它们表示某一个参数。 有时,你想同时操作多个参数,或者你并不知道会有多少参数传递进来, 在TypeScript里,你可以把所有参数收集到一个变量里

//剩余参数,会被当做个数不限的可选参数。可以一个都没有,也可以有任意个
 function greeting(firstName: string, ...restName: string[]) {
 return `Hello ${firstName} ${restName.join(' ')}!`;
 }
 console.log(greeting('Osama', 'bin', 'Muhammad', 'bin', 'Awad', 'bin', 'Laden'));
 console.log(greeting('Laden'));

箭头函数

  • 特点:简化函数定义、解决this问题
//无参数,函数体代码只有一行,则该行结果即为函数返回值
 let greeting1 = () => `Hello TS!`;
 console.log(greeting1());
  //一个参数,函数体代码只有一行,则该行结果即为函数返回值
 let greeting2 = (name: string) => `Hello ${name}`;
 console.log(greeting2('QiGe'));
 //两个及以上的参数,函数体代码只有一行,则该行结果即为函数返回值
 let add1 = (n1: number, n2: number) => n1 + n2;
 console.log(add1(1, 2));
 //两个及以上的参数,函数体代码多于一行,则必须用{}包裹,且显式给出return
 let add2 = (n1: number, n2: number) => {
 let sum = n1 + n2;
 return sum;//改为sum++结果如何?
 }
 console.log(add2(1, 2));

8.语句

if…else语句

    if(condition)
    {
      //当条件为true时执行的代码
    }
    else
    {
      //当条件不为true时执行的代码
    }

switch语句

    switch(n)
    {
        case 1 :
             //执行代码块1
             break;//阻止代码自动向下一个case执行
        case 2 :
             //执行代码块2
             break;  
        default:
            //匹配不存在时做的事情
    }

for循环

    for (代码块开始前执行的语句;循环的条件;代码块执行后的执行语句)
    {
     //代码块
    }

while循环

   while(条件)
   {
     //代码块
   }
   while的变体
   do
   {
     //代码块
   }
   while(条件);

break和continue语句
break用于跳出循环;
continue中断当前的循环中的迭代,然后继续循环下一个迭代;

9.模块Module

  • 对于大型的项目,我们需要使用模块进行管理。每个 .ts 文件就是一个模块,通过 export 来对外部模块暴露元素,通过 import 来引入模块。

10.TS框架Angular

在此阶段,首先需要完成Angular的环境配置,然后从基本的英雄之旅的教程,一步一步熟悉掌握此框架;

英雄之旅的教程包含:

  • 创建项目;
  • 英雄编辑器;
  • 显示列表;
  • 创建特性组件;
  • 添加服务;
  • 添加导航;
  • 从服务器获取数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值