- 泛型就是把类型当参数
一. 这是公式里面的传
二. a:number就是传进一个对象,里面的属性a是数字类型,他在一个数组里面
1. 定义了一个泛型接口`Iobj<T>`,它有三个属性:`state`(数字类型),`msg`(字符串类
型),和`data`(类型为`T`的数组)。
1. 接着,定义了一个常量`res`,它的类型是`Iobj<{ a: number }[]>`。这表示`res`是一个
对象,其`data`属性是一个包含对象的数组,这些对象具有一个名为`a`的数字属性。
1. `res`对象被初始化为:
- `state`属性值为`200`,
- `msg`属性值为字符串`"操作成功"`,
- `data`属性值为一个包含两个对象的数组,这两个对象分别是`{ a: 1 }`和`{ a: 2 }`。
type 定义的类型别名与接口(interface)接口在功能上是相似的
type ID = string | number;
这里 ID 是一个类型别名,它可以是一个 string 或 number 类型的值。
// 泛型
// 泛型函数 泛型接口 泛型类
// 1、泛型函数
// T相当于一个变量 这个变量表示类类型
// 约定俗成 泛型变量一般用 T U V W X Y Z
// function fn<T>(a:T):void
// {
// }
// fn<number>(1);
// fn<string>("a");
// fn<Date>(new Date())
例子2
function fn<T,U> 是收类型
(a:T,b:U) 是用类型
function fn<T,U>(a:T,b:U):void{
}
传类型
fn<string,number>("a",10);
-
类型别名和接口的区别
1、类型别名鼠标悬停时显示字面量,接口鼠标悬停时显示接口名 2、接口是可以被extends和implements的继承和实现的,别名不能被继承和实现 3、当无法通过接口来描述一个类型,需要使用到联合类型,交叉类型或者元组类型等时,可 以使用别名更快捷 交叉类型就是继承
泛型工具类型
-
Partial
Partial<T>是一个泛型工具类型,它将类型T的所有属性变为可选。这意味着,当你创建一个Partial<T>类型的变量时,你不需要为T中的所有属性提供值。type Person = { name: string; age: number; }; type PartialPerson = Partial<Person>; // 现在,PartialPerson 类型的对象可以只包含 `name`、`age` 或都不包含 const partialPerson1: PartialPerson = { name: "Alice" }; // 有效 const partialPerson2: PartialPerson = { age: 30 }; // 有效 const partialPerson3: PartialPerson = {}; // 也有效 const partialPerson4: PartialPerson = { name: "Bob", age: 25 }; // 同样有效 -
Pick 在原有类型中,挑选想要的类型。
Pick<T, K> 接受两个类型参数:
T:源类型,即你希望从中选择属性的类型。K:属性键的集合,即从T中选择的属性名。
Pick<T, K> 的结果是一个新的类型,它只包含 T 中 K 指定的那些属性。
type Person = {
name: string;
age: number;
address: string;
};
type Address = Pick<Person, 'name' | 'age'>;
const person: PersonWithoutAddress = {
name: "Alice",
age: 30
}; // 有效,因为只包含了 'name' 和 'age' 属性
// 下面的代码将产生一个错误,因为 'address' 属性不在 ress 类型
中
// const ress: Address = {
// name: "Bob",
// age: 25,
// address: "123 Street"
// };ypeScript 编译器会报错,因为 `address` 不是 `PersonWithoutAddress` 类型的一部分。
exclude通常用作一个函数或配置选项,用于从某个集合、列表或范围中剔除或排除特定的元素或项: type 新类型= Pick<旧类型, 要移除的>
类型声明
作用:给已存在的JS库提供类型声明
后缀:.d.ts
ts文件:写ts代码的
.d.ts文件:提供ts类型信息
他们一般是第三文件