首页 > 其他分享 >专业人士使用的7个秘密TypeScript技巧

专业人士使用的7个秘密TypeScript技巧

时间:2023-06-05 09:56:11浏览次数:42  
标签:TypeScript const 技巧 age number 专业人士 interface type string

TypeScript是一种出色的工具,可以让我们的生活更轻松并避免错误,但有时使用起来会让人不知所措。

 

动图压倒

 

本文概述了所有专业人士都使用的 7 个TypeScript技巧,它们将使您的生活更轻松。

(更多优质教程:java567.com,搜"ts")

1. 类型推断

Typescript足够聪明,可以在您帮助缩小数据类型时推断数据类型。

 enum CounterActionType {
  Increment = "INCREMENT",
  IncrementBy = "INCREMENT_BY",
 }
 ​
 interface IncrementAction {
  type: CounterActionType.Increment;
 }
 ​
 interface IncrementByAction {
  type: CounterActionType.IncrementBy;
  payload: number;
 }
 ​
 type CounterAction =
  | IncrementAction
  | IncrementByAction;
 ​
 function reducer(state: number, action: CounterAction) {
  switch (action.type) {
    case CounterActionType.Increment:
      // TS infers that the action is IncrementAction
      // & has no payload
      return state + 1;
    case CounterActionType.IncrementBy:
      // TS infers that the action is IncrementByAction
      // & has a number as a payload
      return state + action.payload;
    default:
      return state;
  }
 }

 

如上所示,TypeScript根据属性推断操作的类型type,因此您不需要检查是否payload存在。

2.文字类型

通常您需要变量的特定值,这就是文字类型派上用场的地方。

 type Status = "idle" | "loading" | "success" | "error";

 

它也适用于数字:

 type Review = 1 | 2 | 3 | 4 | 5;
 ​
 // or better yet:
 const reviewMap = {
  terrible: 1,
  average: 2,
  good: 3,
  great: 4,
  incredible: 5,
 } as const;
 ​
 // This will generate the same type as above,
 // but it's much more maintainable
 type Review = typeof reviewMap[keyof typeof reviewMap];

 

3.类型守卫

类型保护是另一种缩小变量类型的方法:

 function isNumber(value: any): value is number {
  return typeof value === "number";
 }
 ​
 const validateAge = (age: any) => {
  if (isNumber(age)) {
    // validation logic
    // ...
  } else {
    console.error("The age must be a number");
  }
 };

 

注意:在上面的示例中,最好使用:

 const validateAge = (age: number) => {
  // ...
 };

 

这个例子是为了展示类型保护是如何工作的一个简化。

4. 索引签名

当对象中有动态键时,可以使用**索引签名**来定义其类型:

 enum PaticipationStatus {
  Joined = "JOINED",
  Left = "LEFT",
  Pending = "PENDING",
 }
 ​
 interface ParticipantData {
  [id: string]: PaticipationStatus;
 }
 ​
 const participants: ParticipantData = {
  id1: PaticipationStatus.Joined,
  id2: PaticipationStatus.Left,
  id3: PaticipationStatus.Pending,
  // ...
 };

 

5.泛型

泛型是一个强大的工具,可以让你的代码更容易重用。它允许您定义一个类型,该类型将由您的函数的使用决定

在以下示例中,T是通用类型:

 const clone = <T>(object: T) => {
  const clonedObject: T = JSON.parse(JSON.stringify(object));
  return clonedObject;
 };
 ​
 const obj = {
  a: 1,
  b: {
    c: 3,
  },
 };
 ​
 const obj2 = clone(obj);

 

6. 不可变类型

您可以通过添加as const. 这确保您不会意外更改值。

 const ErrorMessages = {
  InvalidEmail: "Invalid email",
  InvalidPassword: "Invalid password",
  // ...
 } as const;
 ​
 // This will throw an error
 ErrorMessages.InvalidEmail = "New error message";

 

7. 部分、选择、省略和必需类型

通常在处理服务器本地数据时,您需要将某些属性设置为可选必需的

而不是使用相同数据的略微更改版本定义数百个接口。您可以使用Partial, Pick, Omit&Required类型来做到这一点。

 interface User {
  name: string;
  age?: number;
  email: string;
 }
 ​
 type PartialUser = Partial<User>;
 type PickUser = Pick<User, "name" | "age">;
 type OmitUser = Omit<User, "age">;
 type RequiredUser = Required<User>;
 ​
 // PartialUser is equivalent to:
 // interface PartialUser {
 //   name?: string;
 //   age?: number;
 //   email?: string;
 // }
 ​
 // PickUser is equivalent to:
 // interface PickUser {
 //   name: string;
 //   age?: number;
 // }
 ​
 // OmitUser is equivalent to:
 // interface OmitUser {
 //   name: string;
 //   email: string;
 // }
 ​
 // RequiredUser is equivalent to:
 // interface RequiredUser {
 //   name: string;
 //   age: number;
 //   email: string;
 // }

 

当然,您可以使用交集来组合它们:

 type A = B & C;

 

其中B&C是任何类型。

这就是所有的人!

标签:TypeScript,const,技巧,age,number,专业人士,interface,type,string
From: https://www.cnblogs.com/web-666/p/17457074.html

相关文章

  • 1-3Linux帮助使用小技巧
    获取帮助方法:whatis:使用数据库来显示命令的简短描述此工具在系统刚安装后,不可立即使用,需要制作数据库后才可以使用执行以下命令生成数据库command--helpman/usr/share/doc/RedHatdocumentation、Ubuntudocumentation软件项目网站其它网站搜索 1)如......
  • C++程序开发技巧
    引言类(class)的使用分为两种——基于对象(objectBased)和面向对象(objectoriented)基于对象是指,程序设计中单一的类,和其他类没有任何关系单一的类又分为:不带指针的类(classwithoutpointermembers)和带指针的类(classwithpointermembers)面向对象则是类(class)中涉及了类之间的关......
  • android布局技巧:创建高效布局
    AndroidUI工具包提供了一些布局管理器,它们使用起来相当容易,而且,大多数的时候,你只需要使用它们最基本的特征来实现UI。执着于基本特征的使用对于创建UI来说,往往不是最高效的。一个常见的例子就是滥用LinearLayout,它将会导致View树中的View数量激增。View——更糟的是,布局管理器——......
  • 如何选择 CMS – 内容管理系统的技巧
    如果您是企业家或开发人员,您很可能会在某个时候使用内容管理系统(CMS)。在为您的用例选择正确的选项时,了解如何分析CMS选项的众多功能非常重要。在本文中,我将解释CMS存在的原因、它们帮助解决的问题,并且我还将提供有用的指导,帮助您根据需要选择合适的CMS。(更多优质教程:jav......
  • 各种语言的宏技巧汇总
    C/C++https://www.cnblogs.com/develon/p/7845880.html日志#include<android/log.h>#defineR(x)#x#defineSTR(x)R(x)#defineLOG(...)__android_log_print(ANDROID_LOG_DEBUG,__FILE_NAME__":"STR(__LINE__),##__VA_ARGS__)#defineTLOG(tag......
  • 高效的jQuery代码编写技巧大盘点
    [b]缓存变量[/b]DOM遍历是昂贵的,所以尽量将会重用的元素缓存。//糟糕h=$('#element').height();$('#element').css('height',h-20);//建议$element=$('#element');h=$element.height();$element.css('height',h-20);[b]避免全局变......
  • 数据结构与算法-技巧类型题总结
    目录排序逆序排序逆序查询后矩阵的和......
  • ChatGPT使用小技巧—如何快速制作一张表格?
    ChatGPT使用技巧—如何快速制作表格?一、背景:        在学习或工作中,时常会需要做一些表格进行数据统计、分析,通常我们会用word或者excel做出表格,然后把数据一个个复制进去,非常慢,用了ChatGPT之后,你会发现工作会变得如此简单。二、所需工具    ChatGPT平......
  • SEO技巧摘录
    看到就记录一下,以备后用: 百度等各大搜索引擎网页抓取分析 新网站快速获得排名与权重的技巧......
  • TypeScript编程 读书笔记
    @目录TypeScript编程读书笔记TypeScript概述关于编译器类型系统javascript和typescript类型系统比较类型全解什么是类型类型术语类型浅谈anyunknownbooleannumberbigintstringsymbol对象类型别名、并集、交集类型别名并集类型和交集类型数组元组null、undefined、void和never枚举......