typescript

一、基础类型

主要包括以下:number、string、undefined、null、boolean、symbol等

默认情况下null、undefined是所有类型的子类型,可以把null、undefined赋值给number类型的变量,但是当指定了--strictNullChecks标记,null、undefined只能赋值给void和自己

let isDone: boolean = false;

let decLiteral: number = 6;

let name: string = "bob";

let u: undefined = undefined;

let n: null = null;

let s:symbol = Symbol(111);

数组

// 定义数组有两种方式

1、let arr:number[] = [1, 2, 3];

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

元组

let x: [string, number, boolean];

x = ['hello', 2, false];

x[4] = false; // 可以赋值给(string | number | boolean)联合类型

x[5] = undefined;  // Error 不可以赋值给 (string | number | boolean)类型

枚举

// 默认情况下,从0开始编号
enum Color {Red, Green, Yellow};

let c:Color = Color.Red;   // 0

// 也可以主动为其赋值
enum Color {Red='red', Green='green', Yellow='yellow'};
let c:Color = Color.Red;   // red

Any

可以为其赋值任何类型的数据

let notSure: any = 4;
notSure = "maybe a string instead";

Void

某种程度上,void和any效果一样,当函数没有返回值时,可以的设置返回值类型为void。

function fun():void{
    console.log('console message');
}

Object

let o:object = {a: 1};

类型断言

类型断言有两种方式:

尖括号”语法
let someValue:any = 'string';

const num:number = (<string>someValue).length;

as语法

let someValue:any = 'string';

const num:number = (someValue as string).length;

当在typescript中使用jsx时,只能as语法能使用

二、interface接口

描述对象拥有的各种属性的外形,也可以描述函数类型

interface animal {
    name: string,
    age?: number,  // 可以选择参数
    readonly color: 'string', // 只读参数   
    (name:string, age:number): boolean,  // 函数类型
}

接口继承,并且可同时集成多个接口。

interface Shape {
    color: string;
}
interface PenStroke {
    penWidth: number;
}

interface Square extends Shape, PenStroke  {
    sideLength: number;
}

接口继承类

当接口继承了一个类类型时,它会继承类的成员,但不包括其实现,

class Control {
    private state: any;
}

interface SelectableControl extends Control {
    select(): void;
}

三、类

class Animal {
    move(distanceInMeters: number = 0) {
        console.log(`Animal moved ${distanceInMeters}m.`);
    }
}

// 类继承
class Dog extends Animal {
    bark() {
        console.log('Woof! Woof!');
    }
}

private 

当成员被标记成private时,它就不能在声明它的类的外部访问,

class Animal {
    private name: string;
    constructor(theName: string) { this.name = theName; }
}

new Animal("Cat").name; // 错误: 'name' 是私有的.

protected

protected和private修饰符相似,但有一点不同,protected成员在派生类中仍然可以访问。

class Person {
    protected name: string;
    constructor(name: string) { this.name = name; }
}

class Employee extends Person {
    private department: string;

    constructor(name: string, department: string) {
        super(name)
        this.department = department;
    }

    public getElevatorPitch() {
        // 在派生类中可以访问
        return `Hello, my name is ${this.name} and I work in ${this.department}.`;
    }
}

let howard = new Employee("Howard", "Sales");
console.log(howard.getElevatorPitch());
console.log(howard.name); // 错误   外部访问不了

四、泛型

泛型即就是在定义时,不确定参数的类型,泛型通过<>形式表述,

function returnItem<T>(para: T): T {
    return para
}

多个类型参数

function swap<T, U>(tuple: [T, U]): [U, T] {
    return [tuple[1], tuple[0]];
}
swap([7, 'seven']);

五、类型推断

类型推断是在初始化变量和成员时,设置默认参数值和决定函数返回值时。

六、高级类型

交叉类型是将多个类型合并为一个类型,包含了所需的所有类型的特性,用&分隔,

例如:A & B & C

Person & Serializable & Loggable同时是 Person 和 Serializable 和 Loggable。

就是说这个类型的对象同时拥有了这三种类型的成员。

联合类型表示一个值可以是几种类型之一,用数显( | )分隔每个类型, number | string

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值