7 个实用 TypeScript 单行代码

一般更少的代码通常意味着是更好的代码,因此,今天,我将跟大家分享7个TypeScript的单行代码,其中不乏泛型、断言等高级用法,希望对大家有所帮助。

1、底部可见

确定页面底部是否可见。

const bottomVisible = (): boolean =>  document.documentElement.clientHeight + window.scrollY >=  (document.documentElement.clientHeight ||    document.documentElement.scrollHeight);

2、块数组

基于传入大小的块数组。

const chunkArray = <T>(arr: T[], size: number) =>  [...new Array(Math.ceil(arr.length / size))].map((_, i) =>    arr.slice(i * size, (i + 1) * size),  );// [ [ 0, 1 ], [ 2, 3 ], [ 4 ] ]console.log(chunkArray([0, 1, 2, 3, 4], 2));// [ [ 0, 1, 2, 3, 4 ] ]console.log(chunkArray([0, 1, 2, 3, 4], 100));

3、mask

加密字符,可以选择末尾保留字符的个数,也可以自定义加密字符。

  • (char: number | string, num = 0, mask = '*') => String(char).slice(-num).padStart(String(char).length, mask);console.log(mask('123')); // 123console.log(mask('123456789', 4)); // *****6789console.log(mask('123456789', 3, '#')); // ######789

4、on / off

为 DOM 元素或事件委托对象添加/删除事件侦听器,无需 addEventListener/removeEventListener 的麻烦。

const on = <T extends Window | Document | HTMLElement | EventTarget>(  obj: T | null,  ...args: Parameters<T['addEventListener']> | [string, Function | null, ...any]): void => {  obj?.addEventListener?.(    ...(args as Parameters<HTMLElement['addEventListener']>),  );};const off = <T extends Window | Document | HTMLElement | EventTarget>(  obj: T | null,  ...args:    | Parameters<T['removeEventListener']>    | [string, Function | null, ...any]): void => {  obj?.removeEventListener?.(    ...(args as Parameters<HTMLElement['removeEventListener']>),  );};

5、getUUID

使用浏览器中可用的加密 API 生成符合 RFC4122 版本 4 的 UUID。

const getUUID = () =>  (String(1e7) + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) =>    (      Number(c) ^      (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (Number(c) / 4)))    ).toString(16),  );console.log(getUUID());

6、once

执行一次函数。

const once = <T extends (...args: any) => any>(fn: T) =>  (    (ran = false) =>    (): ReturnType<T> =>      ran ? fn : ((ran = !ran), (fn = fn()))  )();let n = 1;const incOnce = once(() => ++n);console.log(incOnce()); // 2console.log(incOnce()); // 2console.log(incOnce()); // 2console.log('n: ', n); // n: 2

7、数据库

将输入字符串散列成一个整数。

const sdbm = (str: string) =>  str    .split('')    .reduce(      (acc, cur) => (acc = cur.charCodeAt(0) + (acc << 6) + (acc << 16) - acc),      0,    );console.log(sdbm('Hello')); // -1421493998console.log(sdbm('Hello')); // -1421493998console.log(sdbm('World')); // -2242392430

写在最后

以上就是我今天跟大家分享的7个关于TypeScript的单行代码技巧,希望对你有帮助。如果你有什么问题,请在留言区给我留言,我会尽快回复。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cheng-Dashi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值