欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

???????分享7?個(gè)實(shí)用?TypeScript?單行代碼

 更新時(shí)間:2022年05月11日 11:06:43   作者:??編程學(xué)習(xí)網(wǎng)????  
這篇文章主要介紹了???????分享7?個(gè)實(shí)用?TypeScript?單行代碼,其中包括泛型、斷言等高級(jí)用法,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助

前言:

一般更少的代碼通常意味著是更好的代碼,因此,今天,我將跟大家分享7個(gè)TypeScript的單行代碼,其中不乏泛型、斷言等高級(jí)用法,希望對(duì)大家有所幫助。

1、底部可見

確定頁(yè)面底部是否可見。

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

2、塊數(shù)組

基于傳入大小的塊數(shù)組。

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

加密字符,可以選擇末尾保留字符的個(gè)數(shù),也可以自定義加密字符。

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

4、on / off

為 DOM 元素或事件委托對(duì)象添加/刪除事件偵聽器,無需 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

執(zhí)行一次函數(shù)。

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()); // 2
console.log(incOnce()); // 2
console.log(incOnce()); // 2
console.log('n: ', n); // n: 2

7、數(shù)據(jù)庫(kù)

將輸入字符串散列成一個(gè)整數(shù)。

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

到此這篇關(guān)于分享7 個(gè)實(shí)用 TypeScript 單行代碼的文章就介紹到這了,更多相關(guān)TypeScript 單行代碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論