[Typescript] Builder pattern - 02

export class BuilderTuple<TList extends any[] = []> {
  list: TList;

  constructor() {
    this.list = [] as any;
  }

  push<TNum extends number>(num: TNum): BuilderTuple<[...TList, TNum]> {
    this.list.push(num);

    return this as any;
  }

  unshift<TNum extends number>(num: TNum): BuilderTuple<[TNum, ...TList]> {
    this.list.unshift(num);

    return this as any;
  }
}

const builderBeforePush = new BuilderTuple();
const listBeforePush = builderBeforePush.list;
//     ^? []

const builderAfterPush = builderBeforePush.push(1).push(2).push(3);
//     ^? BuilderTuple<[1, 2, 3]>
const listAfterPush = builderAfterPush.list;
//     ^? [1,2,3]

const builderAfterUnshift = builderBeforePush.unshift(1).unshift(2).unshift(3);
//     ^? BuilderTuple<[3, 2, 1]>
const listAfterUnshift = builderAfterUnshift.list;
//     ^? [3,2,1]

 

posted @ 2023-02-13 18:12  Zhentiw  阅读(19)  评论(0)    收藏  举报