typescript api

一 基础类型(有null和undefinded吗)
1、布尔值:同js

let isDone: boolean = false;

2、数字:所有数字都是浮点数,支持二进制,八进制,十进制,十六进制

let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
let binaryLiteral: number = 0b1010;
let octalLiteral: number = 0o744;

3、字符串:支持模版字符串

let name: string = "bob";

4、数组:

let list: number[] = [1, 2, 3];
let list: Array = [1, 2, 3]; // 数组范型

5、元组(Tuple):元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同

let x: [string, number];

当访问一个越界的元素,会使用联合类型替代
6、枚举类型(enum):

enum Color {Red=0, Green=1, Blue=2}
let c: Color = Color.Green;
c = Color[1]; // Green

7、Any:任意类型
8、void:没有任何类型

function warnUser(): void { // 没有返回值
    console.log("This is my warning message");
}
let unusable: void = undefined|null;

9、Null和Undefined
当你指定了--strictNullChecks标记,null和undefined只能赋值给void和它们各自。
10、Never:无法到达的重点,不存在的类型

// 返回never的函数必须存在无法达到的终点
function error(message: string): never {
    throw new Error(message);
}

// 推断的返回值类型为never
function fail() {
    return error("Something failed");
}

// 返回never的函数必须存在无法达到的终点
function infiniteLoop(): never {
    while (true) {
    }
}

11、Object:非原始类型,也就是除number,string,boolean,symbol,null或undefined之外的类型。
12、类型断言:

let someValue: any = "this is a string";

let strLength: number = (someValue).length; // 我知道someValue一定是string,所以不用检查类型了,直接掉用length属性吧;
let strLength: number = (someValue as string).length; // 同上,jsx语法支持

二 变量声明 es6的内容
三 接口
1、概念及示例:

interface LabelledValue { // LabelledValue是接口的名字,这个接口定义了一个约束,它代表了有一个 label属性且类型为string的对象
  label: string;
}

function printLabel(labelledObj: LabelledValue) {
  console.log(labelledObj.label);
}

let myObj = {size: 10, label: "Size 10 Object"};
printLabel(myObj);

2、可选属性:

interface SquareConfig {
  color?: string;
  width?: number;
}

3、只读属性:只能在刚创建的时候赋值

interface Point {
    readonly x: number;
    readonly y: number;
}
/* TypeScript具有ReadonlyArray类型,它与Array相似,只是把所有可变方法去掉了,因此可以确保数组创建后再也不能被修改:*/
let a: number[] = [1, 2, 3, 4];
let ro: ReadonlyArray = a;
ro[0] = 12; // error!
ro.push(5); // error!
ro.length = 100; // error!
a = ro; // error!
/* 上面代码的最后一行,可以看到就算把整个ReadonlyArray赋值到一个普通数组也是不可以的。 但是你可以用类型断言重写: */
a = ro as number[];

readonly vs const
最简单判断该用readonly还是const的方法是看要把它做为变量使用还是做为一个属性。 做为变量使用的话用 const,若做为属性则使用readonly。
4、额外的属性检查
如果你的参数中含有约束中没有的字段,他会提示你这个字段有可能是错误的,你可以通过一下两种方式来避免这种错误提示

1、interface SquareConfig {
    color?: string;
    width?: number;
    [propName: string]: any; // 任意的其他字段
}
2、let squareOptions = { colour: "red", width: 100 };
let mySquare = createSquare(squareOptions); // 不使用对象字面量可以绕开这种检查

5、函数类型接口,只有参数列表和返回值类型的定义,没有实现

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

let mySearch: SearchFunc;
mySearch = function(src: string, sub: string): boolean {
  let result = src.search(sub);
  return result > -1;
}

对于函数类型的类型检查来说,函数的参数名不需要与接口里定义的名字相匹配,只要对应位置桑的参数类型是兼容的
6、可索引的类型
7、类类型
8、

四 类
n、抽像类:在类的声明前加上abstract前缀,里面可以包含抽象方法也可以包含实例方法,但抽象方法前面必须加上关键字。

abstract class Department {

    constructor(public name: string) {
    }

    printName(): void {
        console.log('Department name: ' + this.name);
    }

    abstract printMeeting(): void; // 必须在派生类中实现
}

注意:在继承抽象类的时候,如果声明一个变量类型是抽象类型,但是示例化是派生类型,则这个对象不可调用派生类自己的方法。
2、把类当做接口使用
类可以定义类型,所以在js里接口也可以继承类

class Point {
    x: number;
    y: number;
}

interface Point3d extends Point {
    z: number;
}

五、函数

你可能感兴趣的:(typescript api)