当前位置: 首页 > wzjs >正文

中国没公司怎么做网站html网站更新

中国没公司怎么做网站,html网站更新,提升网站长尾关键词排,黑龙江省建设会计协会网站首页嗨,大家好,我是莫循,Typescript是JavaScript的超集,现在已经广泛用于前端开发,那么在项目中如何用好类型定义呢?以下是一些可以提供参考的案例实践。 一、类型组织策略 1. 模块化类型定义 按功能/模块划分…

嗨,大家好,我是莫循,Typescript是JavaScript的超集,现在已经广泛用于前端开发,那么在项目中如何用好类型定义呢?以下是一些可以提供参考的案例实践。

一、类型组织策略

1. 模块化类型定义
  • 按功能/模块划分将类型定义与业务模块绑定,避免全局类型污染。

     // src/modules/user/types.tsexport interface User {id: string;name: string;email: string;role: 'admin' | 'user';}export type UserCreationParams = Omit<User, 'id'>;
    
  • 使用命名空间聚合相关类型适用于复杂模块的嵌套类型管理。

     // src/modules/order/types.tsexport namespace OrderTypes {export interface Order {id: string;items: OrderItem[];status: 'pending' | 'shipped' | 'delivered';}export interface OrderItem {productId: string;quantity: number;}}
    
2. 全局共享类型
  • 定义全局基础类型src/types 目录下存放跨模块共享的类型。

     // src/types/core.tsexport type PaginationParams = {page: number;pageSize: number;};export type ApiResponse<T> = {data: T;error?: string;};
    
  • 使用 declare global 扩展全局类型扩展第三方库或浏览器环境类型。

     // src/types/env.d.tsdeclare global {interface Window {analytics: ThirdPartyAnalyticsLib;}}
    

二、高效类型定义技巧

1. 利用实用工具类型(Utility Types)
  • 从现有类型派生新类型

     type UserPreview = Pick<User, 'id' | 'name'>;type PartialUser = Partial<User>;type ReadonlyUser = Readonly<User>;
    
  • 条件类型与映射类型处理动态或复杂场景(如 API 路由参数提取):

     type RouteParams<T extends string> =T extends `${string}/:${infer Param}/${string}`? { [K in Param]: string }: never;type UserRouteParams = RouteParams<'/user/:userId/profile'>; // { userId: string }
    
2. 泛型**(Generics)的深度应用**
  • 约束 API 响应结构

     interface ApiResponse<T> {code: number;data: T;message?: string;}async function fetchUser(id: string): Promise<ApiResponse<User>> {// ...}
    
  • 泛型组件与高阶函数

     // 泛型列表组件interface ListProps<T> {items: T[];renderItem: (item: T) => React.ReactNode;}function List<T>({ items, renderItem }: ListProps<T>) {return <div>{items.map(renderItem)}</div>;}
    
3. 类型守卫(Type Guards)
  • 精准缩小类型范围
      function isAdmin(user: User): user is User & { role: 'admin' } {return user.role === 'admin';}if (isAdmin(currentUser)) {// 此处 currentUser 自动推断为管理员类型}
    

三、工程化实践

1. 类型与业务逻辑****解耦
  • 独立类型文件避免在组件或工具函数中直接定义复杂类型,单独维护 .types.ts 文件。

  • DRY(Don’t Repeat Yourself)原则通过 extendsUtility Types 复用类型:

     interface BaseEntity {id: string;createdAt: Date;}interface User extends BaseEntity {name: string;}
    
2. 严格配置 TypeScript
  • 启用严格模式(**tsconfig.json**

     {"compilerOptions": {"strict": true,"noImplicitAny": true,"strictNullChecks": true,"strictFunctionTypes": true}}
    
  • 路径别名简化导入

     {"compilerOptions": {"baseUrl": ".","paths": {"@/*": ["src/*"]}}}
    
     import { User } from '@/modules/user/types';
    
3. 自动化类型生成
  • 集成 OpenAPI/****Swagger使用 openapi-typescript 自动生成 API 类型:

     npx openapi-typescript https://api.example.com/swagger.json -o src/types/api.d.ts
    
  • 从数据库 Schema 生成类型使用工具如 kysely-codegenTypeORM 自动生成实体类型。

四、团队协作规范

1. 统一代码风格
  • 命名约定

    • 类型前缀 Ttype TUser = { ... }(可选)
    • 接口后缀 InterfaceUserInterface(可选,需团队一致)
  • 文档注释使用 JSDoc 增强类型可读性:

     /*** 用户实体类型* @property id - 用户唯一标识* @property name - 用户姓名(2-20字符)*/interface User {id: string;name: string;}
    
2. 代码审查关注点
  • 禁止使用 any,优先选择 unknown 或明确类型。
  • 检查复杂类型是否可被工具类型简化。
  • 确保公共 API(如组件 Props、函数参数)的类型完备性。

五、性能优化

1. 避免过度类型体操
  • 优先使用简单联合类型和接口,而非复杂的条件类型。
  • 示例:用联合类型替代嵌套条件类型
     // ✅ 更易维护type Status = 'loading' | 'success' | 'error';// ❌ 过度设计type Status<T> = T extends Promise<infer U>? 'loading': U extends Error? 'error': 'success';
    
2. Project References 分割代码库
  • 将大型项目拆分为多个子项目,提升编译速度。
      // tsconfig.base.json{"references": [{ "path": "./packages/core" },{ "path": "./packages/ui" }]}
    

六、典型场景示例

1. API 响应类型安全
// src/types/api.ts
export type ApiResponse<T> =| { status: 'success'; data: T }| { status: 'error'; code: number; message: string };// 使用示例
async function fetchData(): Promise<ApiResponse<User[]>> {try {const res = await axios.get('/api/users');return { status: 'success', data: res.data };} catch (error) {return { status: 'error', code: 500, message: 'Server error' };}
}
2. Redux Toolkit 类型化 Slice
// src/store/userSlice.ts
import { createSlice, PayloadAction } from '@reduxjs/toolkit';interface UserState {users: User[];loading: boolean;error: string | null;
}const initialState: UserState = {users: [],loading: false,error: null,
};const userSlice = createSlice({name: 'user',initialState,reducers: {fetchUsersStart(state) {state.loading = true;},fetchUsersSuccess(state, action: PayloadAction<User[]>) {state.users = action.payload;state.loading = false;},fetchUsersFailure(state, action: PayloadAction<string>) {state.error = action.payload;state.loading = false;},},
});

总结

  1. 模块化组织类型,避免全局污染。
  2. 深度应用泛型与工具类型,提升代码复用率。
  3. 严格类型检查配置,确保项目安全性。
  4. 自动化类型生成,减少手动维护成本。
  5. 统一团队规范,保障协作一致性。
http://www.dtcms.com/wzjs/828382.html

相关文章:

  • 瑞丽企业网站建设wordpress制作数据排行榜
  • 安徽网站建设整体策划方案可以做动画的网站有哪些
  • 公司网络推广网站成都教育行业网站建设
  • 最便宜做网站的方法邯郸网站建设开发公司
  • 基于vue.js旅游网站开发打广告去哪个平台
  • 合肥网站建设博客平面设计就业方向有哪些
  • 专业网站建设办公手机建站平台淘客
  • 新乡网站建设费用洛阳做网站找哪家好
  • 西宁网站优化上海装修公司咨询
  • 做国外零售的话是在什么网站开店wordpress编码修改
  • 微网站建设第一步是进行什么的设置游戏开发培训学校
  • 企业网站建设代码搭网站可以用自己电脑做服务器吗
  • 郑州哪有做网站的苏州营销型网站建设推广
  • 有了自己的网站怎样做后台苏州园区做网站
  • 如何做旅游攻略网站在建设银行网站申请完信用卡
  • 百合怎么做网站网站页面设计版权
  • 淘宝客怎么做直播网站吗生活用品创新设计方案
  • 建设网站需要哪些元素怎么找到某个wordpress
  • 花茶网站设计网站开发公司一站式服务
  • 长沙免费模板建站婚恋网站的架构
  • 静态网站怎么做如何成为百度广告代理商
  • 网站建设从入门到精通+网盘wordpress会员卡
  • 上海手机网站制作全屏产品网站
  • 深圳坂田网站设计公司有哪些电子商务营销优势
  • 做教育培训的网站大宗商品价格查询网站
  • 17网站一起做网店潮汕依依wordpress绝对路径
  • 青岛营销型网站制作辽宁省工程造价信息网
  • 网站建设找单郑州做网站的公司msgg
  • 网站建设安全问题网络营销技术
  • 在阿里巴巴做网站多少钱2019企业推广费用