前端面试:TypeScript
1. TS 相比 JS 的优势? TS 提供静态类型检查,可以提前发现错误,增强 IDE 提示,提升大型项目可维护性。接口数据、组件 props、业务模型都会更清晰。 2. interface 和 type 区别? interface 更适合描述对象结构,可以声明合并; type 更灵活,能写联合类型、交叉类型、工具类型。对象模型常用 interface ,复杂组合类型常用 type 。 3. 泛型是什么?怎么用? 泛型是把类型作为参数
二、TypeScript
1. TS 相比 JS 的优势?
TS 提供静态类型检查,可以提前发现错误,增强 IDE 提示,提升大型项目可维护性。接口数据、组件 props、业务模型都会更清晰。
2. interface 和 type 区别?
interface 更适合描述对象结构,可以声明合并;type 更灵活,能写联合类型、交叉类型、工具类型。对象模型常用 interface,复杂组合类型常用 type。
3. 泛型是什么?怎么用?
泛型是把类型作为参数传入,提升复用性和类型准确性。比如封装请求函数 request<T>(),调用接口时传入返回数据类型。
4. any、unknown、never 区别?
any 放弃类型检查;unknown 表示未知类型,使用前要判断;never 表示永远不会出现的值,比如抛异常函数或穷尽检查。
5. 如何给接口返回数据定义类型?
先定义通用响应结构,比如 ApiResponse<T>,再给具体业务数据定义类型,接口函数返回 Promise<ApiResponse<User>>。
6. 如何给 Vue 组件 props、emit 定义类型?
props 可以用 defineProps<Props>(),emit 用 defineEmits<{ submit: [value: FormData] }>(),这样父子组件传参和事件都有类型提示。
7. 如何避免 TS 类型太复杂?
类型命名要清晰,复杂类型拆成多个小类型;接口返回类型和页面状态类型分开;不要为了炫技写过度泛型,优先保证可读性。
8. 工具类型用过吗?
用过。Partial<T> 把属性变可选,Pick<T, K> 选部分字段,Omit<T, K> 排除字段,Record<K, T> 定义键值对象。常用于表单、接口参数、字典映射。
评论留言
登录后可留言和点赞