前言
随着前端项目的不断扩大和复杂化,开发者们对于代码的表现力和可维护性要求也越来越高。TypeScript 和 Lodash 是目前前端开发中非常优秀的工具,它们分别解决了 JavaScript 在编译时类型检查和数组/对象操作上的缺陷。本文将围绕着 TypeScript 和 Lodash 展开,介绍一些它们在开发中的实用方法。
一、TypeScript
1. 类型推断
TypeScript 中的类型推断可以让我们无需手动声明变量类型,而自动推导出变量类型。下面是一个简单的例子:
const str = "hello" // 推断出 str 类型为 string
2. 基础数据类型
TypeScript 支持 JavaScript 中的基础数据类型,包括 number、string、boolean、null、undefined、symbol。如果需要定义一个类型为这些基础类型的变量,可以这样写:
let num: number = 123; let str: string = "hello"; let bool: boolean = true; let nul: null = null; let und: undefined = undefined; let sym: symbol = Symbol();
3. any 类型
当我们无法确定变量类型时,可以使用 any 类型来声明变量:
let foo: any = "hello"; foo = 123; // 不会报错
4. 接口
TypeScript 中的接口可以理解为一个约束,约束一个对象有哪些属性和方法。下面是一个接口的例子:
interface Person { name: string; age: number; sayHello(): void; }
定义了这个接口之后,如果有一个对象符合这个接口的要求,可以这样声明:
let person: Person = { name: "张三", age: 18, sayHello() { console.log("Hello"); } }
5. 泛型
泛型是指在定义函数、类或接口的时候,在其中使用一个不确定的类型变量,从而增加代码的通用性。下面是一个函数的例子:
function toArray<T>(arg: T): T[] { return [arg]; } let a = toArray<number>(123); // 返回 [123] let b = toArray<string>("hello"); // 返回 ["hello"]
6. 类
TypeScript 中支持类的概念,并且在类中可以定义属性、方法和构造函数。下面是一个类的例子:
-- -------------------- ---- ------- ----- ------ - ----- ------- ---- ------- ----------------- ------- ---- ------- - --------- - ----- -------- - ---- - ---------- - ------------------- -- ---- -- ------------- --- ----------- ----- ------- - - --- - - --- ------------ ---- ------------- -- ----- ------- -- ---- -- --- --- -- ----- -----展开代码
7. 类型别名
类型别名可用于给一个类型起一个新的名字,方便在我们的代码中引用。下面是一个类型别名的例子:
-- -------------------- ---- ------- ---- ---------- - - ----- ------- ---- ------- - -------- ------------------------ ------------ ------ - ------ ------------- ----------- --- - --- - - - ----- ----- ---- -- -- --- --- - ---------------------- -- -- --- ----展开代码
8. 类型断言
在需要解决 TypeScript 无法识别类型的问题时,类型断言可以告诉 TypeScript 使用某种类型来处理这个值。下面是一个类型断言的例子:
let foo: any = "hello"; let len = (foo as string).length; // 等价于 let len = foo.length;
9. 枚举
枚举类型是指一组有名字的常量集合。下面是一个枚举的例子:
enum Direction { Up, Down, Left, Right } let dir: Direction = Direction.Up;
在这个例子中,Direction.Up、Direction.Down、Direction.Left 和 Direction.Right 都是常量。如果没有赋初值,它们会默认赋值为 0、1、2 和 3。
10. 联合类型
联合类型是指一个值可以属于多个类型中的一个。下面是一个联合类型的例子:
let foo: string | number; foo = "hello"; foo = 123;
在这个例子中,变量 foo 的类型声明了它可以为 string 和 number 两种类型中的任意一个。
11. 交叉类型
交叉类型是指一个值可以同时属于多个类型。下面是一个交叉类型的例子:
-- -------------------- ---- ------- ---- ------ - - ----- ------- ---- ------- - ---- ---------- - - ------- ----- - ---- ---- - ------ - ----------- --- ----- ---- - - ----- ----- ---- --- ------ - ------------------------- - -展开代码
在这个例子中,类型 Geek 符合 Person 和 Programmer 两个类型的要求。
12. 推断类型
TypeScript 中的类型推断可以让我们在使用变量时自动推导出变量类型。下面是一个推断类型的例子:
let foo = "hello"; // 推断出 foo 的类型为 string let bar = () => console.log("hello"); // 推断出 bar 的类型为 () => void
二、Lodash
1. range
range 函数可用于生成一系列连续的数字。下面是一个 range 函数的例子:
import { range } from "lodash"; console.log(range(1, 10)); // 输出 [1,2,3,4,5,6,7,8,9]
2. find
find 函数可用于查找一个数组中符合条件的元素。下面是一个 find 函数的例子:
-- -------------------- ---- ------- ------ - ---- - ---- --------- --------- ------ - ----- ------- ---- ------- - ----- ------- -------- - - - ----- ----- ---- -- -- - ----- ----- ---- -- -- - ----- ----- ---- -- -- -- ----- ----- - ------------ --- -- ----- - ---- ------------------- -- -- ------ ----- ---- ---展开代码
3. filter
filter 函数可用于对一个数组进行筛选。下面是一个 filter 函数的例子:
-- -------------------- ---- ------- ------ - ------ - ---- --------- --------- ------ - ----- ------- ---- ------- - ----- ------- -------- - - - ----- ----- ---- -- -- - ----- ----- ---- -- -- - ----- ----- ---- -- -- -- ----- ----- - -------------- --- -- ----- - ---- ------------------- -- -- ------- ----- ---- ----展开代码
4. sortBy
sortBy 函数可用于对一个数组进行排序。下面是一个 sortBy 函数的例子:
-- -------------------- ---- ------- ------ - ------ - ---- --------- --------- ------ - ----- ------- ---- ------- - ----- ------- -------- - - - ----- ----- ---- -- -- - ----- ----- ---- -- -- - ----- ----- ---- -- -- -- ----- ----- - -------------- --- -- ------- ------------------- -- -- ------- ----- ---- ---- ------ ----- ---- ---- ------ ----- ---- ----展开代码
5. groupBy
groupBy 函数可用于将一个数组按照某个属性或条件进行分组。下面是一个 groupBy 函数的例子:
-- -------------------- ---- ------- ------ - ------- - ---- --------- --------- ------ - ----- ------- ---- ------- - ----- ------- -------- - - - ----- ----- ---- -- -- - ----- ----- ---- -- -- - ----- ----- ---- -- -- -- ----- ----- - --------------- --- -- ------- ------------------- -- -- -- - -- --- ------- ----- ---- ----- -- --- ------- ----- ---- ---- ------ ----- ---- ---- -- -展开代码
6. reduce
reduce 函数可用于对一个数组的元素进行累加或计算。下面是一个 reduce 函数的例子:
import { reduce } from "lodash"; const nums: number[] = [1, 2, 3, 4]; const total = reduce(nums, (sum, n) => sum + n, 0); console.log(total); // 输出 10
在这个例子中,第一个参数为数组,第二个参数是一个回调函数,第三个参数是初始值。
7. map
map 函数可用于对一个数组的元素进行映射得到一个新的数组。下面是一个 map 函数的例子:
import { map } from "lodash"; const nums: number[] = [1, 2, 3, 4]; const square = map(nums, (n) => n * n); console.log(square); // 输出 [1, 4, 9, 16]
8. chunk
chunk 函数可用于将一个数组按照指定大小进行分割。下面是一个 chunk 函数的例子:
import { chunk } from "lodash"; const nums: number[] = [1, 2, 3, 4, 5, 6, 7]; const sections = chunk(nums, 3); console.log(sections); // 输出 [[1,2,3], [4,5,6], [7]]
在这个例子中,第二个参数为分割的大小。
9. debounce
debounce 函数可用于防抖,即在一个函数被触发后,只有在一定时间内没有再次触发才会执行。下面是一个 debounce 函数的例子:
import { debounce } from "lodash"; function search(input: string) { console.log(`正在搜索关键词 "${input}"...`); } const searchDebounced = debounce(search, 1000); searchDebounced("hello"); searchDebounced("world"); setTimeout(() => searchDebounced("TypeScript"), 2000);
在这个例子中,第二个参数为防抖时间,即函数被触发后需要等待的时间。
10. throttle
throttle 函数可用于节流,即一个函数被触发时只会在一定时间内执行一次。下面是一个 throttle 函数的例子:
import { throttle } from "lodash"; function scrollHandler() { console.log("正在滚动..."); } window.addEventListener("scroll", throttle(scrollHandler, 1000));
在这个例子中,第二个参数为节流时间,即函数被触发后需要等待的时间。
11. cloneDeep
cloneDeep 函数可用于将一个对象或数组进行深克隆。下面是一个 cloneDeep 函数的例子:
-- -------------------- ---- ------- ------ - --------- - ---- --------- ----- -------- - - ----- ----- ---- --- -------- - ----- ---- - -- ----- ---- - -------------------- ------------------------ ---------------------- -- -- ------ ----- ---- --- -------- ------ ------ ------------------ -- -- ------ ----- ---- --- -------- ------ ----- ------展开代码
12. intersection
intersection 函数可用于取多个数组的交集。下面是一个 intersection 函数的例子:
import { intersection } from "lodash"; const arr1 = [1, 2, 3]; const arr2 = [2, 3, 4]; const arr3 = [3, 4, 5]; const result = intersection(arr1, arr2, arr3); console.log(result); // 输出 [3]
在这个例子中,intersection 函数将三个数组的交集求出。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67b851ca306f20b3a660055d