[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 @   Zhentiw  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2019-02-13 [Angular] Angular Elements Intro
2018-02-13 [Gatsby] Install Gatsby and Scaffold a Blog
2017-02-13 [Redux] Avoid action type naming conflicts
2017-02-13 [CSS] Get up and running with CSS Grid Layout
2017-02-13 [React] Render Basic SVG Components in React
2017-02-13 [NativeScript] Style NativeScript views using the default core theme
点击右上角即可分享
微信分享提示