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类型系统的强大和灵活性,能够帮助开发者编写更安全、更易于维护的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值