优雅使用ts,解放双手

1. 善用类型推断,减少手动定义

TS 的类型推断能力很强,很多时候无需显式声明:

TypeScript 复制代码
// 无需写 let age: number

let age = 28;

// 函数返回值可自动推断

function add(a: number, b: number) {

return a + b; // 自动推断返回number

}

2. 合理组织类型文件

将类型定义与业务代码分离,例如:

TypeScript 复制代码
src/

types/ // 集中存放类型定义

user.ts

order.ts

components/ // 业务组件

utils/ // 工具函数

3.避免过度类型化

无需为每个变量都定义类型,优先用推断:

TypeScript 复制代码
// 不必写成 const list: number[] = [1,2,3]

const list = [1, 2, 3];

4.利用工具简化类型工作

  • 使用typeof提取已有变量类型:
TypeScript 复制代码
const defaultUser = { name: "admin", age: 30 };

type User = typeof defaultUser; // 自动获得 { name: string; age: number }
  • 用Partial、Pick等工具类型减少重复定义:
TypeScript 复制代码
interface User { id: number; name: string; age: number }

type UserWithoutId = Pick<User, "name" | "age">; // 提取部分属性

5.巧用类型守卫简化分支逻辑

当处理联合类型时,自定义类型守卫可以替代冗长的typeof或instanceof判断,让类型判断更直观:

TypeScript 复制代码
// 定义联合类型

type Admin = { role: 'admin'; permissions: string[] };

type User = { role: 'user'; name: string };

type Person = Admin | User;

// 自定义类型守卫

function isAdmin(person: Person): person is Admin {

return person.role === 'admin';

}

// 使用时自动缩小类型范围

function handlePerson(person: Person) {

if (isAdmin(person)) {

// TS自动推断为Admin类型,可直接访问permissions

console.log(person.permissions);

} else {

// 自动推断为User类型

console.log(person.name);

}

}

非空断言与可选链减少冗余判断

合理使用!(非空断言)和?.(可选链),替代繁琐的if (xxx)判断:

TypeScript 复制代码
interface Data {

user?: {

name?: string;

};

}

const data: Data = {};

// 传统写法:多层判断

if (data.user && data.user.name) {

console.log(data.user.name);

}

// 优雅写法:可选链 + 非空断言(确保存在时使用)

console.log(data.user?.name); // 安全访问,不存在时返回undefined
相关推荐
万少1 小时前
十行代码 带你极速接入鸿蒙6新特性 - 应用内打分评价
前端·harmonyos
一写代码就开心1 小时前
VUE 里面 Object.prototype 是什么,如何使用他
前端
GHOME1 小时前
vue3中setup语法糖和setup函数的区别?
前端·vue.js·面试
lecepin1 小时前
AI Coding 资讯 2025-09-25
前端·javascript·后端
前端_逍遥生1 小时前
Vue3 响应式数据最佳实践速查表
前端·vue.js
KenXu1 小时前
EMP微前端实现Vue2、Vue3、React各版本调用方案
前端
xw51 小时前
一文搞懂Flex弹性布局空间分配规则
前端·css·flexbox
云枫晖1 小时前
手写Promise-静态方法reoslve和reject
前端·javascript
浮幻云月2 小时前
让 Vue 动画如德芙般丝滑!这个 FLIP 动画组件绝了!
前端·javascript
吃饺子不吃馅2 小时前
揭秘 X6 核心概念:Graph、Node、Edge 与 View
前端·javascript·svg