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

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

Open semlinker opened this issue 4 years ago • 17 comments
trafficstars

实现一个 Shift 工具类型,用于移除 T 数组类型中的第一个类型。具体的使用示例如下所示:

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

// 测试用例
type S0 = Shift<[1, 2, 3]> 
type S1 = Shift<[string,number,boolean]> 

请在下面评论你的答案。

semlinker avatar Sep 16 '21 12:09 semlinker

type Shift<T extends any[]> = T extends [infer A, ...infer B] ? B : [];

// 测试用例
type S0 = Shift<[1, 2, 3]>; // [2,3]
type S1 = Shift<[string, number, boolean]>; //[number, boolean]
type S2 = Shift<[]>; // []
type S3 = Shift<[string]>; // []

sunboyZgz avatar Sep 16 '21 13:09 sunboyZgz

type Shift<T extends Array<any>> = T extends [any, ...infer U] ? U : []
// 测试用例
type S0 = Shift<[1, 2, 3]> 
type S1 = Shift<[string,number,boolean]> 

zhaoxiongfei avatar Sep 16 '21 14:09 zhaoxiongfei

type Shift<T extends any[]> = ((...t: T) => void) extends (h: any, ...args: infer R) => void ? R : never;

// 测试用例
type S0 = Shift<[1, 2, 3]> // [2,3]
type S1 = Shift<[string,number,boolean]> // [number, boolean]
type S2 = Shift<[1]> // => []
type S3 = Shift<[]> // => []

douhao1988 avatar Sep 17 '21 13:09 douhao1988

type Shift<T extends any[]> =T extends [A : any , ...Arguments : infer B] ? B :never

解析: 定义一个变量 B ,为除去第一个类型的其他类型集合,然后extends约束以后,称为B。 // 测试用例 type S0 = Shift<[1, 2, 3]> type S1 = Shift<[string,number,boolean]>

yzycool avatar Sep 17 '21 15:09 yzycool


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

// 测试用例
type S0 = Shift<[1, 2, 3]> // [2,3]
type S1 = Shift<[string,number,boolean]> //[number,boolean]

mingzhans avatar Sep 21 '21 14:09 mingzhans

// type Shift<T extends any[]> = T extends [infer F, ...infer R] ? R : never type Shift<T extends any[]> = ((...args: T) => void) extends ((f: infer F, ...r: infer Rest) => void) ? Rest : never type S0 = Shift<[1, 2, 3]> type S1 = Shift<[string,number,boolean]>

Suc5999 avatar Sep 26 '21 10:09 Suc5999

type Shift<T extends any[]> = T extends [infer U, ...infer Arg] ? Arg : T

// 测试用例
type S0 = Shift<[1, 2, 3]>
type S1 = Shift<[string, number, boolean]>

Mrlgm avatar Sep 27 '21 12:09 Mrlgm

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

// 测试用例
type S0 = Shift<[1, 2, 3]> 
type S1 = Shift<[string,number,boolean]> 
type Shift<T extends any[]> = T extends [infer F, ...infer Rest] ? Rest : [];

winfa avatar Sep 27 '21 15:09 winfa

type Shift<T extends any[]> = T extends [infer F, ... infer Rest] ? Rest : []

// 测试用例
type S0 = Shift<[1, '1', 3]> 
type S1 = Shift<[string,number,boolean]> 
type S2 = Shift<[string]>

Flavour86 avatar Oct 22 '21 06:10 Flavour86

export default {}

// 实现一个 Shift 工具类型,用于移除 T 数组类型中的第一个类型。具体的使用示例如下所示: type Shift<T extends any[]> = T extends [infer A, ...infer args] ? args : never

// 测试用例 type S0 = Shift<[1, 2, 3]> type S1 = Shift<[string,number,boolean]>

a572251465 avatar Dec 01 '21 22:12 a572251465

type Shift<T extends any[]> = T extends [infer F, ...infer O] ? O : [];

liulise avatar Dec 07 '21 06:12 liulise

type Shift<T extends any[]> = T extends [f: any, ...args: infer Args] ? Args : any[];

// 测试用例 type S0 = Shift<[1, 2, 3]> type S1 = Shift<[string,number,boolean]>

Ljp10086 avatar Dec 31 '21 03:12 Ljp10086

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

type S0 = Shift<[1, 2, 3]> type S1 = Shift<[string,number,boolean]> type S2 = Shift<[]> type S3 = Shift<[1]>

zouyk avatar Feb 17 '22 02:02 zouyk

type Shift<T extends any[]> = 
  T extends [infer Rirst, ...infer Arr]
    ? Arr
    : []

// 测试用例
type S0 = Shift<[1, 2, 3]> 
type S1 = Shift<[string,number,boolean]> 
``

waleiwalei avatar Mar 14 '22 14:03 waleiwalei

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

// 测试用例
type S0 = Shift<[1, 2, 3]> 
type S1 = Shift<[string,number,boolean]> 

liziqiang avatar Jul 14 '22 03:07 liziqiang

type Shift<T extends any[]> = T extends [infer A, ...infer B] ? B : never; // 你的实现代码

// 测试用例
type S0 = Shift<[1, 2, 3]>;
type S1 = Shift<[string, number, boolean]>;

fishcoderman avatar Aug 25 '22 14:08 fishcoderman

type Shift<T extends any[]> = T extends [infer F, ...infer Rest] ? Rest : T

// 测试用例
type S0 = Shift<[1, 2, 3]> // [2, 3]
type S1 = Shift<[string,number,boolean]> // [number,boolean]
type S2 = Shift<[]> // []

SweeperDuan avatar Dec 11 '23 10:12 SweeperDuan