Skip to content

❤ TS类型

在 TypeScript 中,类型(Type)是用于描述变量、函数等值的形状和行为的,TypeScript 提供了多种内置类型

🌟类型认识

类型主要整个体现的就是 约束的思想

👉数据类型

TypeScript数据类型如下

注意:TypeScript 和 JavaScript 没有整数类型

类型描述示例
``表示文本数据let name: string = "Alice";
number表示数字,包括整数和浮点数let age: number = 30;
boolean表示布尔值 true
false
let isDone: boolean = true;
array表示相同类型的元素数组let list: number[] = [1, 2, 3];
tuple表示已知类型和长度的数组let person: [string, number] = ["Alice", 30];
enum定义一组命名常量enum Color { Red, Green, Blue };
any任意类型,不进行类型检查let value: any = 42;
void无返回值(常用于函数)function log(): void {}
null表示空值let empty: null = null;
undefined表示未定义let undef: undefined = undefined;
never表示不会有返回值function error(): never { throw new Error("error"); }
object表示非原始类型let obj: object = { name: "Alice" };
union联合类型,表示可以是多种类型之一`let id: string
unknown不确定类型,需类型检查后再使用let value: unknown = "Hello";

👉类型注解(Type Annotation)

类型注解是TypeScript区别于JavaScript最显著的特点

TS中为了使代码更规范,更具有可维护性,增加了类型的概念,用来约束变量、参数和函数的值

也就是TS给变量设置了类型,使得变量只能存储某种类型的值

🍎 类型注解语法

JS
let 变量: 类型;

let 变量: 类型 = 值;

function fn(参数: 类型, 参数: 类型): 类型{
  ...
}

例如TypeScript使用类型注解来显式指定标识符的类型(变量、函数、对象)

js
//代码之中的` : number` 就是类型注解

var age: number = 44;          // 数字变量
var name: string = "Rahul";     // 字符串变量
var isUpdated: boolean = true; // 布尔变量

🌟 基本类型(Primitive Types)

JS

string: 表示所有字符串类型。
let name: string = "Alice";


number: 表示所有数字类型(整数和浮点数)。

let age: number = 25;
let pi: number = 3.14;


boolean: 表示布尔值(truefalse)。
let isActive: boolean = true;


null: 表示空值。
let nothing: null = null;


undefined: 表示未定义的值。

let notDefined: undefined = undefined;



symbol: 表示唯一的标识符类型,通常用于对象属性的唯一标识。
let sym: symbol = Symbol('unique');


bigint: 表示大整数类型。
let bigNumber: bigint = 100n;

基础类型

1、string字符串

表示文本数据,只能存储字符串,通常用于描述文字。

支持常规的单引号和双引号,也支持ES6的模板字符串,用反引号 `(记住不是单引号 ')来定义。

JS
const name: string = 'AA'// 
const desc: string = `My name is ${name}`// My name is AA

2、number数字

number表示所有数字类型(整数和浮点数)

所有的数字都是浮点数,部区分 int 、float、double等类型

number类型支持十进制、十六进制等,以及 NaN和Infinity等

JS
const decimal: number = 66;
const binary: number = 0b1010// 10
const hex: number = 0xf00d// 61453
const octal: number = 0o744;// 484
const big: bigint = 100n;// 表示一个bigint型

3、boolean 布尔值

逻辑值 true 或 false,用于条件判断

JS
let isDone: boolean = false;

4、array 数组

可以表示一组相同类型的元素。可以使用 type[]Array<type> 两种方式表示。

比如数字就是 number[]Array<number>

JS
let numbers: number[] = [1, 2, 3];  //建议这种写法 简单明了
let names: Array<number> = [1, 2, 3];

let nums: string[] = ["a", "b", "c"];
let strs: Array<string> = ["a", "b", "c"];

5、tuple 元组

表示已知数量和类型的数组。每个元素可以是不同的类型,适合表示固定结构的数据。

JS
let person: [string, number] = ["Alice", 25];

6、enum 枚举

用来定义一组命名常量。默认情况下枚举的值从 0 开始递增。

JS
enum Color {
  Red,
  Green,
  Blue,
}
let favoriteColor: Color = Color.Green;

7、any 类型

以表示任何类型。适合不确定数据类型的情况,但使用时需谨慎,因为 any 会绕过类型检查。

JS
let randomValue: any = 42;
randomValue = "hello";

任意值是 TS 针对编程时类型不明确的变量使用的一种数据类型,常用于以下三种

🍎变量的值会动态改变时,比如来自用户的输入,任意值类型可以让这些变量跳过编译阶段的类型检查

JS
let x: any = 1;    // 数字类型
x = 'I am who I am';    // 字符串类型
x = false;    // 布尔类型

🍎改写现有代码时,任意值允许在编译时可选择地包含或移除类型检查

JS
let x: any = 4;
x.ifItExists();    // 正确,ifItExists方法在运行时可能存在,但这里并不会检查
x.toFixed();    // 正确

🍎定义存储各种类型数据的数组时

JS

let arrayList: any[] = [1, false, 'fine'];
arrayList[1] = 100;

8、void 空类型

用于没有返回值的函数。声明变量时,类型 void 意味着只能赋值 null 或 undefined。

JS
function logMessage(message: string): void {
  console.log(message);
}

9、null 和 undefined

👉null和undefined空

js
const u: undefined = undefined// undefined
const n: null = null// null

null 和 undefined分别表示"空值"和"未定义"。

在默认情况下,它们是所有类型的子类型,但可以通过设置 strictNullChecks 严格检查。

js
let empty: null = null;
let notAssigned: undefined = undefined;

🍎 null 在 JavaScript 中 null 表示 "什么都没有"。 null是一个只有一个值的特殊类型。表示一个空对象引用。 用 typeof 检测 null 返回是 object。 🍎 undefined 在 JavaScript 中, undefined 是一个没有设置值的变量。 typeof 一个没有值的变量会返回 undefined。 Null 和 Undefined 是其他任何类型(包括 void)的子类型,可以赋值给其它类型,如数字类型,此时,赋值后的类型会变成 null 或 undefined。

在TS中启用严格的空校验(--strictNullChecks)特性,使得null 和 undefined 只能被赋值给 void 或本身对应的类型

js
// 启用 --strictNullChecks
let x: number;
x = 1; // 编译正确
x = undefined;    // 编译错误
x = null;    // 编译错误

上面的例子中变量 x 只能是数字类型。如果一个类型可能出现 null 或 undefined, 可以用 | 来支持多种类型

js
// 启用 --strictNullChecks
let x: number | null | undefined;
x = 1; // 编译正确
x = undefined;    // 编译正确
x = null;    // 编译正确

10、never 类型

表示不会有返回值,通常用于抛出错误或进入无限循环的函数,表示该函数永远不会正常结束。

js
function throwError(message: string): never {
  throw new Error(message);
}

never 是其它类型(包括 null 和 undefined)的子类型,代表从不会出现的值。这意味着声明为 never 类型的变量只能被 never 类型所赋值,在函数中它通常表现为抛出异常或无法执行到终止点(例如无限循环),示例代码如下:

js
let x: never;
let y: number;

// 编译错误,数字类型不能转为 never 类型
x = 123;

// 运行正确,never 类型可以赋值给 never类型
x = (()=>{ throw new Error('exception')})();

// 运行正确,never 类型可以赋值给 数字类型
y = (()=>{ throw new Error('exception')})();

// 返回值为 never 的函数可以是抛出异常的情况
function error(message: string): never {
    throw new Error(message);
}

// 返回值为 never 的函数可以是无法被执行到的终止点的情况
function loop(): never {
    while (true) {}
}

11、object 对象类型

表示非原始类型的值,适用于复杂的对象结构。

js
let person: object = { name: "Alice", age: 30 };

12、联合类型 (Union)

表示一个变量可以是多种类型之一。通过 | 符号实现。

js
let id: string | number;
id = "123";
id = 456;

13、unknown 不确定的类型

与 any 类似,但更严格。必须经过类型检查后才能赋值给其他类型变量。

js
let value: unknown = "Hello";
if (typeof value === "string") {
  let message: string = value;
}

14、类型断言 (Type Assertions)

类型断言可以让开发者明确告诉编译器变量的类型,常用于无法推断的情况。可以使用 as 或尖括号语法。

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

15、字面量类型

字面量类型可以让变量只能拥有特定的值,用于结合联合类型定义变量的特定状态。

js
let direction: "up" | "down" | "left" | "right";
direction = "up";

👉补充部分--Symbol()唯一标识符

Symbol 是 ES6 引入的一种新的原始数据类型,表示独一无二的值。Symbol() 函数可以生成一个 Symbol 类型的值。

每个方法返回的值都是唯一的,并且不能与其他任何值相等。

JS
const sym1: symbol = Symbol()
const sym2: symbol = Symbol('foo')
const sym3: symbol = Symbol('foo')
console.log(sym2 === sym3) // false

Released under the MIT License.