Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
semlinker opened this issue Sep 16, 2021 · 19 comments
Open

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

semlinker opened this issue Sep 16, 2021 · 19 comments

Comments

@semlinker
Copy link
Owner

semlinker commented Sep 16, 2021

实现一个 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]

请在下面评论你的答案。

@zhaoxiongfei
Copy link

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

@semlinker
Copy link
Owner Author

//使用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

@douhao1988
Copy link

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

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

@mingzhans
Copy link

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]

@wenye123
Copy link

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

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

@Suc5999
Copy link

Suc5999 commented Sep 26, 2021

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

@Mrlgm
Copy link

Mrlgm commented Sep 27, 2021

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

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

@winfa
Copy link

winfa commented Sep 27, 2021

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]

@zhaoxiongfei
Copy link

// 实现一个 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]

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

@Flavour86
Copy link

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

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

@a572251465
Copy link

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]

@Ljp10086
Copy link

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

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

@smartymoon
Copy link

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

@jeffacode
Copy link

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]

@waleiwalei
Copy link

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]

@ChangerHe
Copy link

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

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

@liziqiang
Copy link

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
Copy link

fishcoderman commented Aug 25, 2022

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

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

@LLDLZ
Copy link

LLDLZ commented Oct 21, 2022

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests