前端面试题汇总
JavaScript
性能
linux
前端资料汇总
// 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,前端基础,前端核心,前端进阶,移动端开发,计算机基础,算法与数据结构,项目,职业发展等等
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】