TypeScript type类型别名


在TypeScript(简称TS)中, type 关键字用于创建类型别名,它允许你为现有的类型创建一个新的名字,这有助于组织代码、提高可读性,并允许你创建更复杂的类型。


1. 基本类型别名

type 最简单的用法是为现有的基本类型(如 string、number、boolean 等)创建别名。

type Name = string;  
type Age = number;  
  
let name: Name = "Alice";  
let age: Age = 30;

2. 对象类型别名

可以使用 type 来定义对象的形状,这类似于 interface,但 type 允许你在单个声明中定义更复杂的类型。

type Person = {  
    name: string;  
    age: number;  
    greet: () => void;  
};  
  
let person: Person = {  
    name: "Alice",  
    age: 30,  
    greet: () => console.log("Hello!")  
};

3. 交叉类型(Intersection Types)

type 可以用来创建交叉类型,它结合了多个类型的所有成员。

这类似于 interface 的 extend

type Named = { name: string };  
type Aged = { age: number };  
  
type Person = Named & Aged;  
  
let person: Person = {  
    name: "Alice",  
    age: 30  
};

4. 联合类型(Union Types)

联合类型允许一个变量可以是几种类型中的任意一种。

type ID = string | number;  
  
let id: ID = 123;  
// 你可以将 id 赋值为字符串或数字  
id = "abc";

5. 映射类型(Mapped Types)

映射类型通过遍历现有类型的所有属性,并基于这些属性创建新的属性来创建新类型。

type Partial<T> = {  
    [P in keyof T]?: T[P];  
};  
  
type PersonPartial = Partial<Person>;  
  
let personPartial: PersonPartial = {  
    name: "Alice" // age 属性是可选的  
};

6. 条件类型(Conditional Types)

条件类型允许你根据条件来定义类型。

type IsNumber<T> = T extends number ? true : false;  
  
type Result1 = IsNumber<string>; // false  
type Result2 = IsNumber<123>;    // true

7. 索引访问类型(Indexed Access Types)

索引访问类型通过类型上的索引签名来访问其属性的类型。

type Prop<T, K extends keyof T> = T[K];  
  
type PersonProps = {  
    name: string;  
    age: number;  
};  
  
type NameProp = Prop<PersonProps, 'name'>; // string

8. 推断类型(Inferred Types)

在TypeScript中,当你定义一个变量并赋值时,TypeScript可以推断出该变量的类型。但有时候,你可能想明确指定这个推断出的类型,这时可以使用 type 来创建一个别名。

const arr = [1, 2, 3];  
type ArrayType = typeof arr; // 推断出 ArrayType 是 number[]

9. 泛型(Generics)

type 也可以和泛型一起使用,以创建可重用的类型定义。

type Id<T> = T & { id: number };  
  
type PersonWithId = Id<Person>;  
  
let personWithId: PersonWithId = {  
    name: "Alice",  
    age: 30,  
    id: 1  
};

相关推荐

  1. TypeScript type类型别名

    2024-05-10 19:58:06       10 阅读
  2. Mybatis配置-类型别名(typeAliases)

    2024-05-10 19:58:06       36 阅读
  3. typescript type 类型别名详解

    2024-05-10 19:58:06       31 阅读
  4. go 语言中的别名类型

    2024-05-10 19:58:06       38 阅读
  5. Rust :给数据类型起一个别名

    2024-05-10 19:58:06       11 阅读
  6. Golang学习之路一八类型别名和转换

    2024-05-10 19:58:06       34 阅读
  7. npm insall报错无效的依赖类型别名(alias)

    2024-05-10 19:58:06       18 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-10 19:58:06       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-10 19:58:06       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-10 19:58:06       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-10 19:58:06       18 阅读

热门阅读

  1. Qt QShortcut快捷键类详解

    2024-05-10 19:58:06       10 阅读
  2. 十二届蓝桥杯Python组3月中/高级试题 第二题

    2024-05-10 19:58:06       9 阅读
  3. 智密腾讯云直播组建--准备腾讯云环境

    2024-05-10 19:58:06       9 阅读
  4. html中的整体布局该如何做

    2024-05-10 19:58:06       9 阅读
  5. nginx常用内置变量

    2024-05-10 19:58:06       10 阅读
  6. 在编程中,什么是类的继承?

    2024-05-10 19:58:06       10 阅读
  7. 获取最新的CVE信息

    2024-05-10 19:58:06       9 阅读
  8. 【Redis7】10大数据类型之Bitmap类型

    2024-05-10 19:58:06       8 阅读
  9. 【数据流图】用JointJs实现数据流图(二)

    2024-05-10 19:58:06       10 阅读
  10. 代码随想录 | 总结篇

    2024-05-10 19:58:06       8 阅读