TypeScript泛型开发常见错误解析

1. 过度使用泛型

错误示例

TypeScript 复制代码
// 不必要的泛型
function identity<T>(value: T): T {
  return value;
}

// 应该直接使用具体类型
function identity(value: string): string {
  return value;
}

正确做法

TypeScript 复制代码
// 只在需要灵活性时使用泛型
function identity<T>(value: T): T {
  return value; // 确实需要处理任意类型时
}

2. 泛型约束缺失

错误示例

TypeScript 复制代码
function getLength<T>(obj: T): number {
  return obj.length; // Error: Property 'length' does not exist on type 'T'
}

正确做法

TypeScript 复制代码
// 添加约束确保类型安全
interface HasLength {
  length: number;
}

function getLength<T extends HasLength>(obj: T): number {
  return obj.length;
}

3. 泛型推断问题

错误示例

TypeScript 复制代码
function merge<T, U>(obj1: T, obj2: U) {
  return { ...obj1, ...obj2 };
}

const result = merge({ name: "John" }, 25); // U 被推断为 number,但可能不是期望的

正确做法

TypeScript 复制代码
// 明确指定类型或添加约束
function merge<T extends object, U extends object>(obj1: T, obj2: U): T & U {
  return { ...obj1, ...obj2 };
}

// 或者明确指定类型
const result = merge<{ name: string }, { age: number }>(
  { name: "John" }, 
  { age: 25 }
);

4. 泛型默认值使用不当

错误示例

TypeScript 复制代码
class Container<T = any> { // 过度使用 any
  value: T;
  
  constructor(value: T) {
    this.value = value;
  }
}

正确做法

TypeScript 复制代码
// 使用更具体的默认类型
class Container<T = unknown> {
  value: T;
  
  constructor(value: T) {
    this.value = value;
  }
}

// 或者不提供默认值,强制使用者指定
class Container<T> {
  value: T;
  
  constructor(value: T) {
    this.value = value;
  }
}
相关推荐
wechatbot8882 分钟前
极客互动企业微信 SCRM 自动运营平台效果实测
java·微信·企业微信·rpa
需要8265 分钟前
JVM 内存区域与对象创建:一次 GC 从哪来
java·jvm·spring boot·spring·servlet·tomcat
伞伞悦读29 分钟前
【第37期】Python JSON 与配置详解:序列化、反序列化、嵌套结构和配置文件
开发语言·python·json
事圆则缓30 分钟前
Java 转 Kotlin 的 Android 迁移路线
java
计算机毕设定制辅导-无忧学长35 分钟前
《基于Vue的流浪动物救助中心管理系统的设计与实现》
java·vue.js·spring boot·流浪动物救助中心管理系统
CCCCCCCCharlie37 分钟前
Linux进程控制四大核心操作
linux·开发语言
Mikko738 分钟前
jackson-databind 升到 2.21.6 就安全了吗?jackson-core 是另一个坐标,它那条 high 全局库至今没收
java·后端·安全·json
Java_AI工程师39 分钟前
90%的人写Function Calling,只写了"把参数传给工具执行"这一步,剩下的参数校验、错误重试、超时控制、结果格式化,全是空白。
java·人工智能·程序员
斯维赤42 分钟前
LangChain4j 入门教学(Java 后端狂喜版
java·后端
Java_2017_csdn1 小时前
Java 8 Stream API 中的 map 和 flatMap 详解
java