首页 > 其他分享 >TypeScript - -类型实战

TypeScript - -类型实战

时间:2022-11-25 15:12:45浏览次数:66  
标签:实战 TypeScript string number Repeat 参数 数组 类型 type

TypeScript - -类型实战

下面介绍的几个常见实战操作,数量不多,但是提供了一些思路, 学习理解这些思路,和js 实现的区别。为自己写代码的时候打下小小的基础

1. 实现返回 promise 返回值类型的类

type UnwrapPromise<T> = T extends Promise<infer U> ? U: Error
type A = UnwrapPromise<Promise<string>>

2. 实现includes

type T1 = includes<[1,2,3,4], 5> // false
type T2 = includes<['a',2,3,4], 'a'> // true

按照上面的举的列子, 就是要实现 includes 它接收两个参数, 第一个参数是个数组, 第二个参数时基础数据类型,如果第二个参数在一个数组中的元素类型中, 就返回 true 否则 返回 false

type includes<T extends readonly any[], P> = P extends T[number] ? true : false

应为第一个参数时数组, 所以 P extends T[number] 就是看下 P 是不是在第一个数组的元素类型中

3. 实现push

type A = push<[1,2,3], 4> // [1,2,3,4]
type B = push<[1], 2>  // [1,2]
type C = push<[], string> [string]

就是传入两个参数,第一个参数时个数组类型, 第二个参数时任意的, 然后返回的类型就是将第二个参数 添加到数组中, 返回最新的类型

type Push<T extends any[], I> = T extends [...infer P] ? [...P,I] : [I]

4. 实现getValue

就是实现一个方法, 第一个参数为类, 第二个参数是类中的一个属性,返回该属性的值

interface Person {
  name: string;
  age: number;
}
const tom: Person = {
  name: 'tom',
  age: 34
}
function getValue () {
  ...
}
const name = getValue(tom, 'name') // string
const age = getValue(tom, 'age') // number

实现如下

function getValue<T, K extends keyof T>(data: T, key: K): T[K] {
  return data[key]
}

5. 实现Repeat

实现一个Repeat 接收两个参数, 第一个参数是一个任意的类型, 第二个参数是个数字, 返回一个元组, 元组的长度就是数字, 每个值就是传入的第一个参数

tyoe A = Repeat(number, 3) // [number, number, number]
tyoe B = Repeat(string, 3) // [string, string, string]
tyoe C = Repeat(1, 2) // [1, 1]
tyoe D = Repeat(0, 0) // []

实现如下

type Reapet<T, C, R extends any[] = []> = R['length'] extends C ? R : Reapet<T,C [...R,T]>

上面的实现中思路类似与js 中的递归思路, Reapet 参数中创建一个默认的第三个数组参数 R , 接下来判断 R数组的length 是不是满足第二个参数, 如果满足就返回 R 不满足将 继续调用 Reapet ,这个时候的第三个参数就是将 R 和 T 放在一个数组中, 传递给Reapet.

下面是我的小程序体验码,希望能和大家共同学习进步

标签:实战,TypeScript,string,number,Repeat,参数,数组,类型,type
From: https://www.cnblogs.com/eyesstar/p/16925213.html

相关文章

  • TypeScript--5常见问题
    TypeScript--5常见问题interface和type的区别是什么||interface|type||---|---|---||可定义类型|object,array,function,classconstructor|所......
  • c/c++ 基本数据类型在16位、32位、64位操作系统下所占字节大小(存储空间)
     表格预览数据类型16位操作系统(byte)32位操作系统(byte)64位操作系统(byte)取值范围char111-128~127unsignedchar1110~255shortint/sh......
  • Python入门(3)——基本数据类型及运算符
    常见的几种基本数据类型python是弱类型语言,相对于强类型语言,它不需要声明变量的类型。在Python中一切都是对象。可以使用id()函数查看此对象的id。Python中的数据类型很多,而......
  • 限制上传文件类型
    在上传文件时,在表单元素中设置accept属性,这个属性只能与<inputtype="file">一起使用才生效。accept的属性值是MIME值,MIME值对应的文件类型可以看这个链接菜鸟编程-MIME......
  • day01--数据类型
    强类型语言java是强类型语言,要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用数据类型的两大类基本类型byte1字节short2字节int4字节lon......
  • 一文熟悉 Go 的基础语法和基本数据类型
    耐心和持久胜过激烈和狂热。前言快速上手一门新的语言,首先要做的就是熟悉新语言的基本语法和基本数据类型,本文将对Go语言的基础语法和基本数据类型进行介绍。Hello,World!记......
  • 深入讲解Ts中高级类型工具
    写在最前:本文转自掘金一、前置内容[key:string]索引签名类型索引签名类型主要指的是在接口或类型别名中,通过以下语法来快速声明一个键值类型一致的类型结构:interf......
  • JavaScript中类型转换
    原文链接:https://zhuanlan.zhihu.com/p/516440022一、概述前面我们讲到,JS中有六种简单数据类型:undefined、null、boolean、string、number、symbol,以及引用类型:obj......
  • MySQL进阶实战3,mysql索引详解,上篇
    一、索引索引是存储引擎用于快速查找记录的一种数据结构。我觉得数据库中最重要的知识点,就是索引。存储引擎以不同的方式使用B-Tree索引,性能也各有不同,各有优劣。例如MyI......
  • [Typescript] 115. Hard - Drop String
    Dropthespecifiedcharsfromastring.Forexample:typeButterfly=DropString<'foobar!','fb'>//'ooar!' /*_____________YourCodeHere_____________......