???????分享7?個(gè)實(shí)用?TypeScript?單行代碼
前言:
一般更少的代碼通常意味著是更好的代碼,因此,今天,我將跟大家分享7個(gè)TypeScript的單行代碼,其中不乏泛型、斷言等高級(jí)用法,希望對(duì)大家有所幫助。
1、底部可見(jiàn)
確定頁(yè)面底部是否可見(jiàn)。
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, '#')); // ######7894、on / off
為 DOM 元素或事件委托對(duì)象添加/刪除事件偵聽(tīng)器,無(wú)需 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: 27、數(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)文章
javascript基于定時(shí)器實(shí)現(xiàn)進(jìn)度條功能實(shí)例
這篇文章主要介紹了javascript基于定時(shí)器實(shí)現(xiàn)進(jìn)度條功能,簡(jiǎn)單分析了javascript定時(shí)器的功能、使用方法并給出了基于定時(shí)器實(shí)現(xiàn)的進(jìn)度條功能實(shí)例,需要的朋友可以參考下2017-10-10
純js實(shí)現(xiàn)動(dòng)態(tài)時(shí)間顯示
這篇文章主要為大家詳細(xì)介紹了純js實(shí)現(xiàn)動(dòng)態(tài)時(shí)間顯示,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
使用PBFunc在Powerbuilder中支付寶當(dāng)面付款功能
這篇文章主要介紹了使用PBFunc在Powerbuilder中支付寶當(dāng)面付款功能的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-10-10
淺析Javascript中bind()方法的使用與實(shí)現(xiàn)
下面小編就為大家?guī)?lái)一篇淺析Javascript中bind()方法的使用與實(shí)現(xiàn)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,一起跟隨小編過(guò)來(lái)看看吧2016-04-04
深入探究JavaScript的類(lèi)型判斷(從基礎(chǔ)到精通)
JavaScript 語(yǔ)言具有多種數(shù)據(jù)類(lèi)型,它們可以大致分為兩大類(lèi):基本數(shù)據(jù)類(lèi)型(Primitive Data Types)和引用數(shù)據(jù)類(lèi)型(Reference Data Types),本文將帶大家一起從基礎(chǔ)到精通深入探究JavaScript的類(lèi)型判斷,需要的朋友可以參考下2024-05-05
微信小程序 如何引入外部字體庫(kù)iconfont的圖標(biāo)
這篇文章主要為大家詳細(xì)介紹了微信小程序引入外部字體庫(kù)iconfont圖標(biāo)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
RGB轉(zhuǎn)換實(shí)現(xiàn)代碼,淘寶前端開(kāi)發(fā)工程師筆試題
寫(xiě)一個(gè)轉(zhuǎn)換RGB的值的函數(shù),實(shí)現(xiàn)以下效果。2010-11-11

