TypeScript 之 基础类型、高级类型

  1. 在元素类型后面接上[]
    let list: number[] = [1, 2, 3];
  2. 使用数组泛型,Array<元素类型>
    let list: Array<number> = [1, 2, 3];
  • 元组(Tuple):
    元组类型表示一个已知元素数量和类型的数组,各元素的类型不必相同。 比如,你可以定义一对值分别为string和number类型的元组。
// Declare a tuple type
let x: [string, number];
// Initialize it
x = ['hello', 10]; // OK
  • enum类型是对JavaScript标准数据类型的一个补充。
enum Color {Red, Green, Blue};
let c: Color = Color.Green;
  • void:
    void类型的变量,只能为它赋予undefined和null

  • null 和 undefined
    默认情况下null和undefined是所有类型的子类型。 就是说你可以把null和undefined赋值给number类型的变量。
    然而,当你指定了--strictNullChecks标记,null和undefined只能赋值给void和它们各自。 这能避免很多常见的问题。 也许在某处你想传入一个string或null或undefined,你可以使用联合类型string | null | undefined。

  • 类型断言
    类型断言 告诉编译器,“就要用我指定的类型”。
    类型断言好比其它语言里的类型转换,但是不进行特殊的数据检查和解构。 它没有运行时的影响,只是在编译阶段起作用。 TypeScript会假设你,程序员,已经进行了必须的检查。
    类型断言有两种形式。 其一是“尖括号”语法:

let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;

另一个为as语法(推荐):

let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;

两种形式是等价的。然而,当你在TypeScript里使用JSX时,只能使用 as语法断言。

  • 联合类型
    联合类型表示一个值可以是几种类型之一。 用竖线(|)分隔每个类型,所以number | string | boolean表示一个值可以是number,string,或boolean。
    如果一个值是联合类型,我们只能访问此联合类型的所有类型里共有的成员。

  • 用户自定义的类型保护
    通过 类型保护,我们只要检查一次类型,就能够在后面的每个分支里清楚变量的类型。
    类型保护就是一些表达式,它们会在运行时检查以确保在某个作用域里的类型。 要定义一个类型保护,我们只要简单地定义一个函数,它的返回值是一个类型断言:

function isFish(pet: Fish | Bird): pet is Fish {
    return (<Fish>pet).swim !== undefined;
}

在这个例子里,pet is Fish就是类型断言。 一个断言是parameterName is Type这种形式,parameterName必须是来自于当前函数签名里的一个参数名。

  • typeof类型保护
    typeof类型保护,只有2种形式能被识别:typeof v === "typename"typeof v !== "typename","typename"必须是"number","string","boolean"或"symbol"。
    但是TypeScript并不会阻止你与其它字符串比较,或者将它们位置对换,且语言不会把它们识别为类型保护。

  • instanceof类型保护
    instanceof类型保护是通过其构造函数来细化其类型。
    举例:Dog instanceof Animal

  • 交叉类型
    例如Person & Serializable & Loggable,同时是Person和Serializable和Loggable。

  • 类型别名
    类型别名,会给一个类型起个新名字。 类型别名有时和接口很像,但是可以作用于原始值,联合类型,元组以及其它任何手写的类型。

  • 字符串字面量类型
    字符串字面量类型,允许你指定字符串必须的固定值。 在实际应用中,字符串字面量类型可以与联合类型,类型保护和类型别名很好的配合。 通过结合使用这些特性,你可以实现类似枚举类型的字符串。
    type Easing = "ease-in" | "ease-out" | "ease-in-out";
    字符串字面量类型,还可以用于区分函数重载。

  • 多态的this类型
    多态的this类型,表示的是某个包含类或接口的子类型。 这被称做F-bounded多态性。 它能很容易的表现连贯接口间的继承。

原文地址:https://www.cnblogs.com/cag2050/p/9547320.html