awesome-typescript icon indicating copy to clipboard operation
awesome-typescript copied to clipboard

「重学TS 2.0 」TS 练习题第十六题

Open semlinker opened this issue 3 years ago • 19 comments

实现一个 Push 工具类型,用于把指定类型 E 作为第最后一个元素添加到 T 数组类型中。具体的使用示例如下所示:

type Push<T extends any[], V> = // 你的实现代码

// 测试用例
type Arr0 = Push<[], 1> // [1]
type Arr1 = Push<[1, 2, 3], 4> // [1, 2, 3, 4]

请在下面评论你的答案。

semlinker avatar Sep 16 '21 12:09 semlinker

type Push<T extends any[], V> = T extends [...infer U] ? [...U, V] : never;

// 测试用例
type Arr0 = Push<[], 1> // [1]
type Arr1 = Push<[1, 2, 3], 4> // [1, 2, 3, 4

zhaoxiongfei avatar Sep 16 '21 14:09 zhaoxiongfei

//使用11题的isEqual
type Includes<T extends Array<any>, E> = T extends [infer A, ...infer B]
  ? IsEqual<A, E> extends true
    ? true
    : Includes<B, E>
  : false;

type I0 = Includes<[], 1>; // false
type I1 = Includes<[2, 2, 3, 1], 2>; // true
type I2 = Includes<[2, 3, 3, 1], 1>; // true

你的答案串题了 @sunboyZgz

semlinker avatar Sep 16 '21 23:09 semlinker

type Push<T extends any[], V> =  [...T, V];

// 测试用例
type Arr0 = Push<[], 1> // [1]
type Arr1 = Push<[1, 2, 3], 4> // [1, 2, 3, 4]

douhao1988 avatar Sep 17 '21 14:09 douhao1988

type Push<T extends any[], V> = T extends [...infer Args] ? [ ...Args, V] : never// 你的实现代码

// 测试用例
type Arr0 = Push<[], 1> // [1]
type Arr1 = Push<[1, 2, 3], 4> // [1, 2, 3, 4]

mingzhans avatar Sep 21 '21 14:09 mingzhans

type Push<T extends any[], V> = [...T, V] // 你的实现代码

// 测试用例
type Arr0 = Push<[], 1> // [1]
type Arr1 = Push<[1, 2, 3], 4> // [1, 2, 3, 4]

wenye123 avatar Sep 24 '21 06:09 wenye123

type Push<T extends any[], V> = [...T, V] type ArrP0 = Push<[], 1> // [1] type ArrP1 = Push<[1, 2, 3], 4> // [1, 2, 3, 4]

Suc5999 avatar Sep 26 '21 10:09 Suc5999

type Push<T extends any[], V> = [...T, V]

// 测试用例
type Arr0 = Push<[], 1> // [1]
type Arr1 = Push<[1, 2, 3], 4> // [1, 2, 3, 4]

Mrlgm avatar Sep 27 '21 12:09 Mrlgm

ype Push<T extends any[], V> = // 你的实现代码

// 测试用例
type Arr0 = Push<[], 1> // [1]
type Arr1 = Push<[1, 2, 3], 4> // [1, 2, 3, 4]
type Push<T extends any[], V> = [...T, V]

winfa avatar Sep 27 '21 15:09 winfa

// 实现一个 Push 工具类型,用于把指定类型 E 作为第最后一个元素添加到 T 数组类型中。具体的使用示例如下所示:
type Push<T extends any[], V> = [...T, V];

// 测试用例
type Arr0 = Push<[], 1> // [1]
type Arr1 = Push<[1, 2, 3], 4> // [1, 2, 3, 4]

着眼点在数组的形状上,直接构造。省去乱七八糟的东西

zhaoxiongfei avatar Oct 01 '21 15:10 zhaoxiongfei

type Push<T extends any[], V> = [...T, V]

// 测试用例
type Arr0 = Push<[], 1> // [1]
type Arr1 = Push<[1, 2, 3], 4> // [1, 2, 3, 4]

Flavour86 avatar Oct 22 '21 06:10 Flavour86

export default {}

// 实现一个 Push 工具类型,用于把指定类型 E 作为第最后一个元素添加到 T 数组类型中。具体的使用示例如下所示: type Push<T extends any[], V> = [V, ...T]

// 测试用例 type Arr0 = Push<[], 1> // [1] type Arr1 = Push<[1, 2, 3], 4> // [1, 2, 3, 4]

a572251465 avatar Dec 01 '21 22:12 a572251465

type Push<T extends any[], V> = [...T, V];

// 测试用例 type Arr0 = Push<[], 1> // [1] type Arr1 = Push<[1, 2, 3], 4> // [1, 2, 3, 4]

Ljp10086 avatar Dec 31 '21 03:12 Ljp10086

type Push<T extends any[], V> = [...T, V]

smartymoon avatar Jan 14 '22 14:01 smartymoon

type Push<T extends any[], V> = T extends [...infer R] ? [...R, V] : T

// 测试用例
type Arr0 = Push<[], 1> // [1]
type Arr1 = Push<[1, 2, 3], 4> // [1, 2, 3, 4]

jeffacode avatar Feb 09 '22 11:02 jeffacode

type Push<T extends any[], V> =
  T extends [...infer Arr]
    ? [...Arr, V]
    : []

// 测试用例
type Arr0 = Push<[], 1> // [1]
type Arr1 = Push<[1, 2, 3], 4> // [1, 2, 3, 4]

waleiwalei avatar Mar 14 '22 14:03 waleiwalei

// 解法1: 直接扩展运算符
type Push<T extends any[], V> = [...T, V]

// 解法2: 使用infer指代源数组来扩展
type Push1<T extends any[], V> = T extends [...infer K] ? [...K, V] : []

ChangerHe avatar May 27 '22 06:05 ChangerHe

type Push<T extends any[], V> = [...T, V] // 你的实现代码

// 测试用例
type Arr0 = Push<[], 1> // [1]
type Arr1 = Push<[1, 2, 3], 4> // [1, 2, 3, 4]

liziqiang avatar Jul 14 '22 03:07 liziqiang

type Push<T extends any[], V> = [...T, V]; // 你的实现代码

// 测试用例
type Arr0 = Push<[], 1>; // [1]
type Arr1 = Push<[1, 2, 3], 4>; // [1, 2, 3, 4]

fishcoderman avatar Aug 25 '22 14:08 fishcoderman

type Push<T extends any[], V> = [...T, V];

// 测试用例
type TestArr0 = Push<[], 1>; // [1]
type TestArr1 = Push<[1, 2, 3], 4>; // [1, 2, 3, 4]

LLDLZ avatar Oct 21 '22 06:10 LLDLZ