frontend-interview icon indicating copy to clipboard operation
frontend-interview copied to clipboard

TS中的元组和枚举类型的作用

Open su37josephxia opened this issue 2 years ago • 11 comments

su37josephxia avatar Mar 07 '22 00:03 su37josephxia

什么是元组

元组它允许表示一个已知元素数量和类型的数组,且数组的长度是固定的,各元素的类型不必相同

let x: [number, string] = [1,'abc']

什么是枚举

在仅指定常量命名的情况下,定义的就是一个默认从 0 开始递增的数字集合,称之为数字枚举。如果想要从其他值开始递增,可以将第一个值的索引值进行指定,还可以给每个字段指定不连续的任意索引值,字符串枚举值要求每个字段的值都必须是字符串字面量,或者是该枚举值中另一个字符串枚举成员。定义枚举类型的值时,可以通过 Enum['key'] 或者 Enum.key 的形式获取到对应的值 value。TypeScript 还支持反向映射,但是反向映射只支持数字枚举,不支持字符串枚举。 TypeScript 中有一个const enum(常量枚举),在定义枚举的语句之前加上const关键字,这样编译后的代码不会创建这个对象,只是会从枚举里拿到相应的值进行替换。

QbjGKNick avatar Mar 08 '22 14:03 QbjGKNick

TS 中的元组和枚举类型的作用

元组

元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同

//定义一个元组类型
let x: [string, number]
x = ['hello', 10] // ok
x = [10, 'hello'] // error

元组可以越界添加元素(不建议),但是不能越界访问

const list: [string, number] = ['hello', 123]
list.push('world')
console.log(list) // [ 'hello', 123, 'world' ]
console.log(list[2]) // error

元组中的元素可选:

let list: [number, string?, boolean?]
list = [10, 'hello', true]
list = [10, 'hello']
list = [10]

但是可选元素必须在必选元素的后面,可选元素后必须都是可选元素

let list: [number, string?, boolean]
// Error: A required element cannot follow an optional element

元组的应用

React Hooks 的返回值类型

import { useState } from 'react'

const [loading, setLoading] = useState < boolean > false

因为 hook 的返回值通常是一个数组,并且数组中的元素类型不同,这时候就需要使用元组类型

当我们需要使用数组,但是数组中元素类型可能不同时,就可以使用元组

type Touple = [string, number, string]
let csvData: Touple[] = [
  ['张三', 18, '男'],
  ['李四', 14, '男'],
]

枚举

枚举(Enum)类型用于取值被限定在一定范围内的场景,比如一周只能有七天,颜色限定为红绿蓝等。

enum Days {
  Sun,
  Mon,
  Tue,
  Wed,
  Thu,
  Fri,
  Sat,
}

数字枚举

枚举成员会被赋值为从 0 开始递增的数字,同时也会对枚举值到枚举名进行反向映射:

enum Days {
  Sun,
  Mon,
  Tue,
  Wed,
  Thu,
  Fri,
  Sat,
}

console.log(Days['Sun'] === 0) // true
console.log(Days['Mon'] === 1) // true
console.log(Days['Tue'] === 2) // true
console.log(Days['Sat'] === 6) // true

console.log(Days[0] === 'Sun') // true
console.log(Days[1] === 'Mon') // true
console.log(Days[2] === 'Tue') // true
console.log(Days[6] === 'Sat') // true

字符串枚举

enum Status {
  enable = 'enable',
  disable = 'disable',
}

RJM1996 avatar Mar 08 '22 14:03 RJM1996

  • 元组:表示一个已知元素数量和类型的数组,各元素的类型不必相同
  • 枚举: 通过属性获取值,也可以通过索引属性

chunhuigao avatar Mar 08 '22 14:03 chunhuigao

元组

元组是 TypeScript 中特有的类型,其工作方式类似于数组。

元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同

枚举

使用枚举我们可以定义一些带名字的常量。 使用枚举可以清晰地表达意图或创建一组有区别的用例。

7TingYu avatar Mar 08 '22 14:03 7TingYu

什么是枚举 枚举enum类型是对javascript标准数据类型的一种补充,可以通过属性获取值,也可以通过索引 使用枚举我们可以定义一些带名字的常量。 使用枚举可以清晰地表达意图或创建一组有区别的用例 什么是元组 元组是 TypeScript 中特有的类型,其工作方式类似于数组。 它允许表示一个已知元素数量和类型的数组,各元素的类型不必相同

partiallove avatar Mar 08 '22 15:03 partiallove

元组,相当于数组[]约束功能拓展,可以给数组的值指定多个类型。但是需要让数组的值和元组的类型一一对应,并且初始化赋值时值的个数和类型都要匹配,只声明的话不用。并且不能添加其他类型的值,不能越界读值,比如

let arr: [number, boolean] = [1, true]
arr.push('foo') // error
arr[4] // error

枚举,像一个对象,里面每个key都代表一个递增的数。可以通过判断名字代替判断数字,更加语义化。还可以指定代表哪个数字,可以重复,但没什么意义,没指定的数字从最后指定的数字开始递增。还可以反过来通过数字拿到 key,比如

enum foo {
  a,
  b,
  c = 1,
  d = 3,
  e
}

console.log(foo.a, foo.b, foo.c, foo.d, foo.e) // 0 1 1 3 4
// 这种写法更清楚知道拿 'a'
console.log(foo[foo.a]) // 'a'
// 这样也行
console.log(foo[0]) // 'a'

// 使用的时候就可以 
if (foo.a > 0) {
  ...
}

zcma11 avatar Mar 08 '22 15:03 zcma11

TS中的元组和枚举类型的作用

元组起源于函数编程语言, 元组合并了不同类型的对象 当直接对元组类型的变量进行初始化或者赋值的时候,需要提供所有元组类型中指定的项 当添加越界的元素时,它的类型会被限制为元组中每个类型的联合类型

枚举(Enum)类型用于取值被限定在一定范围内的场景

ruixue0702 avatar Mar 08 '22 15:03 ruixue0702

  • 元组类型: 元组类型属于数组的一种,就是指定数组每一项的数据类型,数组合并了相同类型的对象

  • 枚举类型

    枚举使用enum关键字定义

    枚举(Enum)类型用于取值被限定在一定范围内的场景,比如一周只能有七天,颜色限定为红绿蓝等。

    枚举成员会被赋值为从 0 开始递增的数字,同时也会对枚举值到枚举名进行反向映射:

    枚举项有两种类型:常数项(constant member)和计算所得项(computed member)

frllk avatar Mar 08 '22 16:03 frllk

元组

元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。 当访问一个已知索引的元素,会得到正确的类型。 当访问一个越界的元素,会使用联合类型替代。

枚举

使用枚举类型可以为一组数值赋予友好的名字。 可以直接使用枚举类型中的值,也可以通过下标映射获取枚举中的值。

rachern avatar Mar 08 '22 16:03 rachern

元组最重要的特性是可以限制数组元素的个数和类型,特别适合用来实现多值返回,常见的象react中useState的返回值就是元组类型

枚举类型一般用于取值被限定在一定范围内的场景, 常用的有数字枚举和字符串枚举,例如开关状态status有0, 1, 2,分别代表关闭/开启/禁用,就可以用数字枚举限定status就在这3个值内

jiafei-cat avatar Mar 08 '22 17:03 jiafei-cat

元组

就是一个提前定义好长度和元素类型的数组,各个元素类型不必相同。 元组提前定义好长度之后,可以继续往里面push,但是无法取出超过预定长度之外的内容。 元组的可选元素一定要放在最后。

枚举类型

枚举类型可以理解为提前定义好的一组值,跟字典很像。枚举类型相较于直接用值类型判断,更易读,能够提升代码的可读性和易维护性。

crazyyoung1020 avatar Mar 08 '22 17:03 crazyyoung1020