TypeScript (TS) 类型定义总结

TypeScript (TS) 类型定义允许开发者为变量、函数参数、返回值等添加静态类型,这有助于提升代码的健壮性和可维护性。以下是一些使用TS类型定义的具体技巧及其例子:

1. 基础类型定义

基本类型如number, string, boolean等可以直接用于变量声明。

let age: number = 25;
let name: string = "Alice";
let isStudent: boolean = true;

2. 接口(Interface)用于对象形状约束

接口可以描述一个对象需要具备的结构。

interface User {
  id: number;
  name: string;
  email?: string; // 可选属性用问号标记
}

function printUserInfo(user: User) {
  console.log(`User ID: ${user.id}, Name: ${user.name}`);
}

const user1: User = { id: 1, name: "Bob" };
printUserInfo(user1);

3. 类型别名(Type Aliases)

类型别名可以给复杂类型起一个名字,提高代码可读性。

type StringOrNumber = string | number;

function combine(a: StringOrNumber, b: StringOrNumber): StringOrNumber {
  return a + b;
}

console.log(combine("Hello, ", "world")); // 输出: Hello, world
console.log(combine(1, 2)); // 输出: 3

4. 函数类型

明确函数参数和返回值的类型。

function add(x: number, y: number): number {
  return x + y;
}

const subtract: (a: number, b: number) => number = (a, b) => a - b;

5. 类的类型

定义类的结构和方法的类型。

class Person {
  constructor(public name: string, public age: number) {}
}

interface HasName {
  name: string;
}

function introduce(p: HasName) {
  console.log(`My name is ${p.name}.`);
}

introduce(new Person("Charlie", 30));

在这个例子中,Person类定义了一个具体的类型,它有两个公开属性:name和age。尽管Person类没有直接实现HasName接口,但是由于它的实例拥有name属性,因此可以被当作HasName类型使用。这里展示了类实例如何匹配一个接口描述的类型,体现了“类的类型”的概念:即类定义不仅用于实例化对象,其结构还定义了一种类型,可以用作类型检查和类型注解。

6. 泛型(Generic)

泛型让函数或类支持多种数据类型。

function identity<T>(arg: T): T {
  return arg;
}

console.log(identity<string>("Hello")); // 输出: Hello
console.log(identity<number>(100)); // 输出: 100

7. 可选参数和默认参数

函数参数可以是可选的,也可以设置默认值。

function greet(name: string, greeting?: string): string {
  if (!greeting) {
    greeting = "Hello";
  }
  return `${greeting}, ${name}!`;
}

console.log(greet("Alice")); // 输出: Hello, Alice!
console.log(greet("Bob", "Hi")); // 输出: Hi, Bob!

8. 映射类型(Map Types)

通过映射类型可以基于现有类型创建新类型。

type Readonly<T> = {
  readonly [P in keyof T]: T[P];
};

interface Person {
  name: string;
  age: number;
}

type ReadonlyPerson = Readonly<Person>;

const person: ReadonlyPerson = { name: "David", age: 35 };
// person.name = "Eve"; // 错误,name是只读的

这些技巧展示了TypeScript类型系统的强大和灵活性,能够帮助开发者编写更安全、更易于维护的代码。

相关推荐

  1. TypeScript (TS) 类型定义总结

    2024-06-10 23:54:01       30 阅读
  2. TypeScript的基础类型和高级类型梳理总结

    2024-06-10 23:54:01       41 阅读
  3. TypeScript系列」TypeScript 基础类型

    2024-06-10 23:54:01       33 阅读
  4. TypeScript类型推断

    2024-06-10 23:54:01       43 阅读
  5. TypeScript 数据类型

    2024-06-10 23:54:01       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-10 23:54:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-10 23:54:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-10 23:54:01       82 阅读
  4. Python语言-面向对象

    2024-06-10 23:54:01       91 阅读

热门阅读

  1. spring 事务隔离级别

    2024-06-10 23:54:01       32 阅读
  2. 实验3-单链表(优化版/王道版)

    2024-06-10 23:54:01       31 阅读
  3. 数据结构-哈希表

    2024-06-10 23:54:01       34 阅读
  4. Qt定时器

    2024-06-10 23:54:01       32 阅读
  5. 【第一篇】SpringSecurity的入门

    2024-06-10 23:54:01       32 阅读
  6. 【手撕面试题】Vue(高频知识点五)

    2024-06-10 23:54:01       35 阅读
  7. 常用位算法

    2024-06-10 23:54:01       31 阅读