typescript的重载(Overload)

重载允许函数(方法)接收不同类型或数量的参数时,做出不同的处理。 js本身作为动态脚本语言是支持重载的,typescript的重载更多的是类型系统的补全。 函数 function func(arg: number): number; function func(arg: string): string; function func(arg: number | string): number | string { if (typeof arg === "number") { return 0; } return "0"; } lambda lambda的重载需要通过定义 type 实现。 type TFunc = { (x: number): number; (x: number, y: string): string; }; export const func: TFunc = (x: number, y = ""): any => { if (y) { return `optional: ${y}`; } return x; }; 方法 静态方法 class C { static method(arg: string): string; static method(): void; static method(arg?...

October 5, 2021 · 2 min · zakudriver

typescript常用的泛型

函数参数类型 type TFuncParameterType<T> = T extends (arg: infer P) => void ? P : string; // e.g function func(arg: string) {} type TParamsType = TFuncParameterType<typeof func>; // string 函数返回值类型 type TFuncReturnType<T> = T extends (arg: any) => infer P ? P : string; // e.g function func(arg: string): number {} type TReturnType = TFuncReturnType<typeof func>; // number 元祖成员作为键约束 const keys = ["a", "b", "c"] as const; type TKeysMap = Record<typeof keys[number], string> // KeysMap: { a: string; b: string; c: string; } 数组元素类型 type ArrayElement<T extends readonly unknown[]> = T extends readonly (infer P)[] ?...

May 21, 2021 · 4 min · zakudriver

typescript元编程

// 硬编码一个二进制 trie type BinaryTrie = [ [ [ [ [[[[0, 1], [2, 3]], [[4, 5], [6, 7]]], [[[8, 9], [10, 11]], [[12, 13], [14, 15]]]], [[[[16, 17], [18, 19]], [[20, 21], [22, 23]]], [[[24, 25], [26, 27]], [[28, 29], [30, 31]]]] ], [ [[[[32, 33], [34, 35]], [[36, 37], [38, 39]]], [[[40, 41], [42, 43]], [[44, 45], [46, 47]]]], [[[[48, 49], [50, 51]], [[52, 53], [54, 55]]], [[[56, 57], [58, 59]], [[60, 61], [62, 63]]]] ] ], [ [ [[[[64, 65], [66, 67]], [[68, 69], [70, 71]]], [[[72, 73], [74, 75]], [[76, 77], [78, 79]]]], [[[[80, 81], [82, 83]], [[84, 85], [86, 87]]], [[[88, 89], [90, 91]], [[92, 93], [94, 95]]]] ], [ [[[[96, 97], [98, 99]], [[100, 101], [102, 103]]], [[[104, 105], [106, 107]], [[108, 109], [110, 111]]]], [[[[112, 113], [114, 115]], [[116, 117], [118, 119]]], [[[120, 121], [122, 123]], [[124, 125], [126, 127]]]] ] ] ], [ [ [ [[[[128, 129], [130, 131]], [[132, 133], [134, 135]]], [[[136, 137], [138, 139]], [[140, 141], [142, 143]]]], [[[[144, 145], [146, 147]], [[148, 149], [150, 151]]], [[[152, 153], [154, 155]], [[156, 157], [158, 159]]]] ], [ [[[[160, 161], [162, 163]], [[164, 165], [166, 167]]], [[[168, 169], [170, 171]], [[172, 173], [174, 175]]]], [[[[176, 177], [178, 179]], [[180, 181], [182, 183]]], [[[184, 185], [186, 187]], [[188, 189], [190, 191]]]] ] ], [ [ [[[[192, 193], [194, 195]], [[196, 197], [198, 199]]], [[[200, 201], [202, 203]], [[204, 205], [206, 207]]]], [[[[208, 209], [210, 211]], [[212, 213], [214, 215]]], [[[216, 217], [218, 219]], [[220, 221], [222, 223]]]] ], [ [[[[224, 225], [226, 227]], [[228, 229], [230, 231]]], [[[232, 233], [234, 235]], [[236, 237], [238, 239]]]], [[[[240, 241], [242, 243]], [[244, 245], [246, 247]]], [[[248, 249], [250, 251]], [[252, 253], [254, 255]]]] ] ] ] ]; // 数组操作 type Copy<T, S extends any> = { [P in keyof T]: S[P] }; type Unshift<T, A> = ((a: A, ....

February 27, 2020 · 7 min · zakudriver