学习angualr之前需要了解的typeScript知识

 
1.编译型语言
2.强类型语言
3.真正的面向对象的语言: 有借口、有泛型、有枚举、有访问修饰符
AMD类型的面向对象的语言
 
 
npm install -g typescript        下载编译工具
 
编译ts文件       tsc xxx.ts/xxx.tsx/xxx.d.ts
 
 
一、有类型的script   ----  在编译期进行检查,ts只编译不执行
    【声明变量】
      var 变量名: 类型
      var a:number;
 
    【基本类型】
    number
    string    
    boolean   : 只有两个值,true、false
    symbol  :  
    void  :  空,一般情况下用做返回值。不允许赋值
    null : 只有一个类型 --- null 
    undefined : 只有一个类型---undefined
    enum   :  枚举, 列举所有的东西 
            性别、星期---有限的可能性
 
enum Gender{
    male,
    female
}

var sex:Gender;
   
any :  任何类型。 变体变量---没有固定类型,可以是任何类型
 
    js的变量都是变体变量.
 
var a: any;

a = 12;
a = 'abc';

 

【类型推理、类型推测】---根据初始化的值推测类型(隐式类型推测)

 

【类型推理、类型推测】---根据初始化的值推测类型(隐式类型推测)

var a = 13;

a = 'abc';  //  报错  , ts 已经推理 a: number;

 

var a;

a = 12;
a = 'abc';     // a: any;

 

【冲突检测】编译器会自动排除掉无用的选项

 

enum WEEK {
    SUN,
    SAT,
    FRE,
    TUS
}

var w = WEEK.SUN;

switch(w) {
    case WEEK.SUN:
        break;
    case WEEK.STA;
        break;
}

// 报错,不会出现WEEK.STA,所以ts编译器认为不应该写第二种case

 

【联合类型】

 

var a:number | string;

a = 12;
a = 'abc';

 

var a:number | string;

var b: boolean;

a = b ? 12: false;
// 报错,false不能作为结果  

 

【数组的类型】

 

var arr = [12, 5, 8];    // 隐式类型声明  var arr:number[] = [12, 5, 8];

arr[3] = 'abc';   //  报错

 

arr: 类型[]  = [];
 
数组其实还是一种泛型;
 
Array --- 典型的泛型  
 
interface Array<T> {
    reverse(): T[];
    sort(compare?: (a: T, b:T) => number):T[];
    ...
}

 

var arr:number[] = [12, 5];

//  等同于

var arr: Array<number> = new Array<number>();

 

【函数的类型】 参数和返回值都可以定义类型

 

function show(a: any, b:number) {
    console.log(a + b);
}

show(12,5);    // 报错

 

参数不仅可以有类型还有函数签名检查(匹配参数的数量)

 

function show(a: number, b: number) {
    console.log(a + b);
}

show(12);  // 报错

 

返回值

 

function sum(a:number, b:number):string {
    return a + b;
}

console.log(sum(12,5));   // 报错,返回值是string

 

【外部变量声明】 declare

 

console.log(a);    // 报错  

 

declare var $;

$(function() {
    $('#div')
})
// 不报错

 

window、 document   叫内置外部声明,不用再次声明。
 
【函数签名】
 
function ajax(url: string, success: (res: string, code: number) => vodi, error: (code:number) => void) {
    ;
}

ajax('1.txt', () => {}, () => {});   // 参数和返回值都有约定

 

 
【类型】
 
1.基本类型
2.联合类型
3.函数签名
4.对象类型
5.联合类型(复合类型)
 
 
【符合类型--可选类型】
 
var point: {x:number, y:number, z?:number};

point = {x:12,y:5}

point = {x:12,y:5,z:8}

 

function show(a: Object) {

}
// json

 

二、接口:interface
 
java中:
 
class Click implements inter {

}

 

 

 

 
接口就是一种约定和限制,是一种必须遵守的规范
 
    比如说 汽车---接口:能开、必须加油
 
interface Point {
    x: number,
    y: number,
    z?: number
}

var p:Point

p = { x:12, y:5};

 

 

三、class

 

class Person {
    // 成员属性
    name: string;
    age: number;
    
    // 构造器
    constructor(name: string, age:number) {
        this.name = name;
        this.age = age;
    }
    
    // 成员方法
    showMe() {
        console.log(`我的名字是${this.name},我的年龄是${this.age}`)
    }
}

var p = new Person('jason', 18);

p.showMe();

 

包括class、extend、多继承
 
 
【访问修饰符】
 
1.public          共有属性            任何类可访问,全局
2.private         私有属性            只有类内部可以访问
3.protected    受保护--友元
 
class Person {
    public name: string,
    private age: number
}

var p = new Person();

p.name = 'jason';   // 报错,name只能在class内部使用

 

 

四、泛型。(模板)
 
请区别于any,泛:宽泛(主要原因)
 
class Calc<T> {
    a: T;
    b: T;   

    constructor(a:T, b: T) {
        this.a = a;
        this.b = b;
    }

    show(c: T) {
        console.log(this.a);
    } 
}

var obj = new Calc<number>(12, 5);

obj.a = 12;
obj.b = 'abc';     //  没生命类型为any,但是<number>会替换class中的<T>

obj.show(99);

 

 

 

有限制,但不是any,是一个有范围的any。
 

 

 

 

 

posted @ 2017-10-19 11:45  Jason齐齐  阅读(473)  评论(0编辑  收藏  举报