typescript笔记-day4
类型别名
- type用于定义类型别名
// 联合类型 |
- 工具类型
- 类型别名可以这么声明自己能够接受泛型(我称之为泛型坑位)
- 泛型参数的名称(上面的 T )也不是固定的。通常我们使用大写的 T / K / U / V / M / O …这种形式。
- 对于工具类型来说,它的主要意义是基于传入的泛型进行各种类型操作,得到一个新的类型
type Factory<T> = T | number | string; |
联合类型|
与交叉类型&
- 联合类型只需要符合成员之一即可(
||
),而交叉类型需要严格符合每一位成员(&&
)。
interface NameStruct { |
- 对于对象类型的交叉类型,其内部的同名属性类型同样会按照交叉类型进行合并:
type Struct1 = { |
索引类型
- 包含三个部分:索引签名类型、索引类型查询与索引类型访问
索引签名类型
- 如下格式:
interface A { |
索引类型查询
keyof
操作符,返回索引所有key对应类型字面量的联合类型- 这里并不会将数字类型的键名转换为字符串类型字面量,而是仍然保持为数字类型字面量。
interface Foo { |
- 模拟 “从键名到联合类型” 的过程。
type FooKeys = Object.keys(Foo).join(" | "); |
export const SIZES = ['mini', 'small', 'medium', 'large'] as const; |
- 这段代码定义了一个常量数组
SIZES
,其中包含了四个字符串元素:mini
、small
、medium
、large
。同时,使用as const
关键字将数组中的元素类型设为不可变的常量类型。 - 接下来,定义了一个类型别名
Size
,它的类型是typeof SIZES[number]
。这个类型别名的意思是,Size
的类型是SIZES
数组中所有元素的联合类型。[number]
表示数组的索引类型,typeof
表示获取SIZES
的类型,因此typeof SIZES[number]
表示获取SIZES
数组中所有元素的类型,并将它们组成一个联合类型。
映射类型
- 映射类型只能使用类型别名实现
in
是遍历的意思
type Stringify<T> = { |
[K in keyof T]: string
是一个映射类型(Mapped Type)的语法。这个特定的映射类型Stringify<T>
会将一个类型T
的所有属性的类型转换成string
类型
interface Foo { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 晚风予星!
评论