首页 > 其他分享 >TypeScript 常用语法实例 & 实用工具类型

TypeScript 常用语法实例 & 实用工具类型

时间:2023-01-28 17:33:51浏览次数:56  
标签:TypeScript name 实用工具 number Person 实例 type age string

1. 函数上声明返回值类型

const userInfoJson = require('./mock/user-info.json')

interface Response<T> {
   data: {
     module: T;
     resultCode?: any;
   }
}
interface UserInfo {
  userId: string;
  userName?: string;
  loginEmail?: string;
  loginPhoneNo?: string;
}

export function getUserInfo(param= {}): Promise<Response<UserInfo>> {
  return Promise.resolve(userInfoJson)
}
// 也可以把 T 泛型(对应的字段类型)声明在函数上面,适应于响应字段较少的场景
export function getUserInfo2(param= {}): Promise<Response<{ userid: number, userName?: string }>> {
  return Promise.resolve(userInfoJson)
}

 

2. 常量数组声明作为类型

const _STATUS = [
  _STATUS_LOGIN,
  _STATUS_INIT,
  _STATUS_PENDING,
  _STATUS_NORMAL,
  _STATUS_FROZEN,
  _STATUS_DISABLED,
] as const;

interface StatusIProps {
  userStatus: typeof _STATUS[number];
}

 

3. Partial

Partial 作用是将传入的属性变为可选项。适用于对类型结构不明确的情况。它使用了两个关键字:keyof、in

type Person = {
  name: string;
  age: number;
  height: number;
}

type PartialPerson = Partial<Person>;
// PartialPerson 的类型为 {name?: string; age?: number; height?: number;}

keyof 可以用来取得接口的所有 key 值:

type Person = {
  name: string;
  age: number;
  height: number;
}

type T = keyof Person 
// T 类型为: "name" | "age" | "number"

in关键字可以遍历枚举类型,:

type Person = "name" | "age" | "number"

type Obj =  {
  [p in Person]: any
} 
// Obj 的类型为: { name: any, age: any, number: any }

 

4. Pick<Type, Keys>

从 Type类型中挑选部分属性 Keys 来构造新的类型。它的声明形式如下:

/**
 * From T, pick a set of properties whose keys are in the union K
 */
type Pick<T, K extends keyof T> = {
    [P in K]: T[P];
};
type Person = {
  name: string;
  age: number;
  height: number;
}
// 使用Pick从Person类型中挑出来了name和age属性的类型,新的类型中只包含这两个属性。
const person: Pick<Person, "name" | "age"> = {
  name: "zhangsan",
  age: 18
}

5. Omit<Type, Keys>

Omit 允许从一个对象中剔除若干个属性,剩下的就是需要的新类型。

type Person = {
  name: string;
  age: number;
  height: number;
}

// 使用Omit从Person类型中剔除了 age 和 height 属性,只剩下 name 属性。
const person: Omit<Person, "age" | "height"> = {
  name: "zhangsan";
}

 Omit 结合 & 符用法

interface WithdrawalTypes {
   componentType: string,
   propsData: {
      value: any,
      label: string
  }
}

// 剔除WithdrawalTypes中propsData的 value属性,留下的 label 属性和 新声明的 value 属性组成新的类型
type IProps = Omit<WithdrawalTypes['propsData'], 'value'> & { value: { [key in 'userId' | 'userName' | 'loginEmail'] : string } }

// 取值代码实例
const { propsData: data }: { propsData: IProps } = props

<div {...data}></div>

 

参考:https://www.51cto.com/article/707434.html 

 

标签:TypeScript,name,实用工具,number,Person,实例,type,age,string
From: https://www.cnblogs.com/xuqichun/p/17070037.html

相关文章

  • Laravel + Vue 3(Vite、TypeScript)SPA 设置
    在本教程中,我将向大家展示如何使用Laravel+Vue3使用typescript和Vite设置你自己的单页应用程序。这是在Laravel项目中添加PWA的手动方法。我们不会使用Inerti......
  • 转!Spring Boot工程如何在IDEA中启动多实例
    转自:https://www.cnblogs.com/luas/p/12097118.html 在日常工作开发过程中,经常会遇到需要启动多个服务实例的情况,相信大家都采用了不同的办法,甚至是笨办法。本篇文章将......
  • 嵌入 WebAssembly 运行时和实例化 WebAssembly 模块的几大要素
    ​​嵌入WebAssembly运行时和实例化WebAssembly模块的几大要素​​ 下面这段代码忽略了错误处理机制,介绍了如何在Go语言开发的宿主程序中嵌入WebAssembly.fun......
  • [Typescript] Handling conditional return type of a function
    import{expect,it}from"vitest";import{Equal,Expect}from"../helpers/type-utils";functionyouSayGoodbyeISayHello(greeting:unknown){returngree......
  • 初探富文本之OT协同实例
    初探富文本之OT协同实例在前边初探富文本之OT协同算法一文中我们探讨了为什么需要协同、为什么仅有原子化的操作并不能实现协同、为什么要有操作变换、如何进行操作变换、......
  • TypeScript readonly props All In One
    TypeScriptreadonlypropsAllInOneTS绕过readonly限制readonlypropertiesinterfacePerson{name:string;age:number;}interfaceReadonlyPerson{......
  • 创建实例的4种方式
    java里面创建实例有哪些方式呢?直接new一个通过反射通过clone方法通过反序列化new一个实例//使用java语言的关键字new创建对象,初始化对象数据,这个确实就没有......
  • 【个人笔记】2023年搭建基于webpack5与typescript的react项目
    写在前面由于我在另外的一些文章所讨论或分析的内容可能基于一个已经初始化好的项目,为了避免每一个文章都重复的描述如何搭建项目,我在本文会统一记录下来,今后相关的文章直......
  • Openstack-创建实例错误
    创建实例错误实例执行所请求操作失败,实例处于错误状态。:请稍后再试[错误:Buildofinstancebeaeb5e0-26eb-4044-ae14-bb87d509886daborted:Failedtoallocateth......
  • TypeScript reuse object's props All In One
    TypeScriptreuseobject'spropsAllInOneexport{};constlog=console.log;//typeCSSProps={[prop:string]:CSSProps};//typeCSSProps=CSSProps[]......