ts学习笔记七:泛型,web开发学习什么

21 阅读2分钟

前端面试题汇总

JavaScript

性能

linux

前端资料汇总

开源分享:docs.qq.com/doc/DSmRnRG…

// interface IMyArr {

// [key: number]: T

// }

// interface ICreateArray { // interface后面的 类型 和 函数前面的类型的区别, 如果放在函数前 表示使用函数的时候确定了类型, 放在接口的后面 表示是使用接口的时候确定类型

// (x: K, y: T): IMyArr;

// }

// // type ICreateArray = (x: number, y: T)=>Array; // 如果泛型不传参是unkown类型

// const createArray: ICreateArray = (times: number, value: T): Array => {

// let result = [];

// for (let i = 0; i < times; i++) {

// result.push(value)

// }

// return result

// }

// createArray(3, 'abc');

// 2.多个泛型 元组进行类型交换

// const swap = <T, K>(tuple: [T, K]): [K, T] => { // 元组是特殊的数组

// return [tuple[1], tuple[0]]

// }

// let r = swap([{}, 'xx']); // => [123,'abc'] 我能确定只有两项

// const sum = (a: T, b: T): T => { // 约束对象

// return (a + b) as T

// }

// sum('a','v')

// 3) 泛型约束 主要强调类型中必须包含某个属性

type withLen = { length: number }

const computeArrayLength = <T extends withLen, K extends withLen>(arr1: T, arr2: K): number => {

return arr1.length + arr2.length

}

computeArrayLength('123', { length: 3 })

const getVal = <T extends object, K extends keyof T>(obj: T, key: K) => {

if (typeof obj !== 'object') {

return

}

}

type T1 = keyof { a: 1, b: 2 }

type T2 = keyof string

type T3 = keyof any; // string |number | symbol

getVal({ a: 1, b: 2 }, 'a')

// 泛型可以给类来使用

class GetArrayMax<T = number> { // [1,2,3] [a,b,c]

public arr: T[] = [];

add(val: T) {

this.arr.push(val)

}

getMax():T {

let arr = this.arr;

let max = arr[0];

for (let i = 1; i < arr.length; i++) {

arr[i] > max ? max = arr[i] : null

}

return max;

更多面试题

**《350页前端校招面试题精编解析大全》**内容大纲主要包括 HTML,CSS,前端基础,前端核心,前端进阶,移动端开发,计算机基础,算法与数据结构,项目,职业发展等等

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】