TypeScript-数据类型

数据类型对比

js 原始数据类型 ts 新增数据类型
number tuple(元组)
string enum(枚举)
boolean any(任意类型)
null void(无类型)
undefined never(永不存在的值的类)
object
symbol

数据类型

  • 布尔值 boolean
  • 数字 number
  • 字符串 string
  • 数组 array
  • 元组 tuple
  • 枚举 enum
  • 任意值 any
  • 没有任何类型 void
  • nullundefined
  • 永不存在的值 never
  • 非原始类型 object

布尔值、数字、字符串

相对简单

// 布尔值
let b: boolean = true;

// 数字
let n: number = 10;

// 字符串
let s: string = "ts";
复制代码

数组

数组定义存在两种方法:

第一种:元素类型后接 []

let list: number[] = [1, 2, 3];
let list1: string[] = ["a", "b", "c"];
复制代码

第二种:数组泛型 Array<元素类型>

let list2: Array<number> = [1, 2, 3];
复制代码

元组

表示一个已知元素数量和类型的数组,各元素的类型不必相同。

let t: [string, number] = ["t", 1];
// 当访问越界元素时,会使用联合类型
// 即只要是订阅的类型都可以使用
t.push("s");
t.push("s");

// 这里会提示错误
t[100] = 2; // 不能将类型“2”分配给类型“undefined”。长度为 "2" 的元组类型 "[string, number]" 在索引 "100" 处没有元素。
复制代码

枚举

使用枚举类型可以为一组数值赋予友好的名字

// 枚举
enum Color {
  Red,
  Green,
  Blue,
}

let c: Color = Color.Red;
复制代码

默认情况下,从0开始为元素编号

也可以手动的指定成员的数值,然后后面未指定的会递增

enum Color {
  Red = 1,
  Green,
  Blue,
}

let c: Color = Color.Red;
复制代码

或者,全部都采用手动赋值:

enum Color {
  Red = 1,
  Green = 3,
  Blue = 5,
}

let c: Color = Color.Red;
复制代码

我们也可以根据枚举的值得到对应的名字

let cName: string = Color[1];
复制代码

any

不确定变量的类型

let a: any = 1;
a = "ts";
复制代码

void

与 any 类型相反,它表示没有任何类型。当一个函数没有返回值,通常使用它表示

function v(): void {
  console.log("void");
}
复制代码

null、undefined

他们各个的类型就是他们本身,用处并不大。

never

永不存在值的类型。通常是抛出异常或者永远不会有返回值的类型

function nev(): never {
  throw "123";
}

function infiniteLoop(): never {
  while (true) {}
}
复制代码

object

object表示非原始类型,也就是除numberstringbooleansymbolnullundefined之外的类型

let o: object;
o = [1, 2, 3];
// o = 1; // 不能将类型“number”分配给类型“object”。
复制代码

类型断言

好比类型转化。我们比编译器更明白某个值的详细信息,通过类型断言跳过对其的校验

let s: any = "this is ts";

let len: number = s.length;
复制代码

上面定义的 s 类型为 any, 但实际的赋值为字符串。直接取值时有可能报错,但是我们确切的知道它就是字符串,此时就可以使用类型断言

类型断言有两种形式。 其一是“尖括号”语法:

let len: number = (<string>s).length;
复制代码

另一个为as语法:

let len: number = (s as string).length;
复制代码

Guess you like

Origin juejin.im/post/7034876446493376543