Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
su37josephxia opened this issue Mar 7, 2022 · 11 comments
Open

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

su37josephxia opened this issue Mar 7, 2022 · 11 comments

Comments

@su37josephxia
Copy link
Owner

No description provided.

@QbjGKNick
Copy link

什么是元组

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

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

什么是枚举

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

@RJM1996
Copy link

RJM1996 commented Mar 8, 2022

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',
}

@chunhuigao
Copy link

chunhuigao commented Mar 8, 2022

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

@7TingYu
Copy link

7TingYu commented Mar 8, 2022

元组

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

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

枚举

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

@partiallove
Copy link

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

@zcma11
Copy link

zcma11 commented Mar 8, 2022

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

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) {
  ...
}

@ruixue0702
Copy link

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

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

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

@frllk
Copy link

frllk commented Mar 8, 2022

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

  • 枚举类型

    枚举使用enum关键字定义

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

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

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

@rachern
Copy link

rachern commented Mar 8, 2022

元组

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

枚举

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

@jiafei-cat
Copy link

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

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

@crazyyoung1020
Copy link

元组

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

枚举类型

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests