# 原始类型

ts的原始数据类型就是js的基础数据类型

string,number,boolean,null,undefined,symbol

根据初始的赋值来推导出变量的类型,并且以后的类型不可改变。

export {}; // 第一行增加这个是为了使文件里的变量不污染全局

// number
let num: number = 1;

// string
let str: string = "2";

// boolean
let bool: boolean = true;

// null
let nul: null = null;

// undefined
let und: undefined = undefined;

// symbol(Symbol创建的变量内存地址永远都是新建的,即使两个一摸一样的变量,其值也永不相等)
let sy: symbol = Symbol("123");

let vd: void = undefined; // 可以把undefined类型赋值给void类型,但是反过来不行

// 在ts中函数没有返回值,函数类型就是void
function fn(): void {}
// 如果函数类型想指定undefined,则必须 return undefined
function fun(): undefined {
  return undefined;
}

注意:

  1. void只用在函数没有返回值的情形下。
  2. undefined和null最大的价值主要体现在接口类型上,表示可缺省、未定义的属性;null表示对象或者属性是空值。
  3. 如果不写类型,typescript是可以推断类型的,但注意let、const的区别

在ts中let和const的区别:

let 它的值决定它的类型
const 它的值就是它的类型(常量不能被修改,所以它的值就是它的类型)

# 对象类型

object Object {}

export {};

// object 只包含数组和对象【常用】
let obj: object = { a: 1 };
let arr: object = [1];

// Object或{}
// 除了包含数组和对象外,还包含number、string、boolean、Symbol。
// null和undefined除外
let obj1: Object = { a: 1 };
let arr1: Object = [1];
let num1: Object = 1;
let obj2: {} = { b: 2 };
let arr2: {} = [2];
let num2: {} = 2;

# 数组类型

//第一种写法: 元素类型[]
let arr1: number[] = [1, 2, 3];
let arr2: { a: number; b: string }[] = [
  { a: 1, b: "aa" },
  { a: 2, b: "bb" },
  { a: 3, b: "cc" },
];

//第二种写法:泛型
let arr3: Array<number> = [1, 2, 3];
let arr4: Array<{ a: number; b: string }> = [
  { a: 1, b: "aa" },
  { a: 2, b: "bb" },
  { a: 3, b: "cc" },
];

# 元组

元组 长度固定的数组 因为长度固定 , 需要指定里面每一个元素的类型 元组 不能用 push pop shift unshift splice

let arr1: [number, number, string] = [1, 2, "c"];
let arr2: (number | string)[] = [1, 2, "c"];