Skip to content

Instantly share code, notes, and snippets.

View tonkotsuboy's full-sized avatar
😸
I want another myself.

Takeshi Kano tonkotsuboy

😸
I want another myself.
View GitHub Profile
@tonkotsuboy
tonkotsuboy / 名前つきキャプチャー.js
Created July 3, 2020 05:47
名前つきキャプチャー
const regrex = /よく(?<food>.*)食う(?<animal>.*)だ/u;
const result1 = "隣の客はよく柿食う客だ".match(regrex);
console.log(result1.groups.food);
console.log(result1.groups.animal);
const result2 = "隣の客はよく牡蠣食う吉田拓郎だ".match(regrex);
console.log(result2.groups.food);
console.log(result2.groups.animal);
@tonkotsuboy
tonkotsuboy / oneLinerArray.js
Created June 27, 2020 09:55
配列の最初の要素、長さ、最終要素をワンライナーで取得する
// 配列の最初の要素、長さ、最終要素をワンライナーで取得する
// 参考: https://twitter.com/argyleink/status/1139415654132436993
// 対象の配列
const myArray = ["😸", "🐶", "🐟", "🦆", "🐳", "🦉"];
// firstに最初の要素、lに長さ, lastに最終要素
const { 0: first, length: l, [l-1]: last} = myArray;
// 確認のため出力。結果は{first: "😸", l: 6, last: "🦉"}
@tonkotsuboy
tonkotsuboy / ObjectValueType.ts
Last active June 8, 2022 01:54
Objectのvalueからなるunion型のエイリアス
// Objectのvalueからなるunion型のエイリアス
type ObjectValueType<T> = T[keyof T];
// 使い方
const MyFood = {
Food1: "ラーメン",
Food2: "カツ丼",
Food3: "ビャンビャン麺",
} as const;
@tonkotsuboy
tonkotsuboy / FoodNameType.ts
Last active June 17, 2020 10:12
オブジェクトの値からなるunion type
const MyFood = {
Food1: "ラーメン",
Food2: "カツ丼",
Food3: "ビャンビャン麺",
} as const;
type FoodNameType = typeof MyFood[keyof typeof MyFood];
// 結果: "ラーメン" | "カツ丼" | "ビャンビャン麺"
@tonkotsuboy
tonkotsuboy / event.targetしか使わない関数.ts
Created April 9, 2020 08:51
event.target しか使わない関数の定義方法について思っていること。
// event.targetしか使わない関数
// ちょっと冗長かも🤮
const foo = (event: MouseEvent) => {
if (event.target == null) {
return;
}
console.log(event.target);
};
@tonkotsuboy
tonkotsuboy / Unwrap<HTMLDivElement>の型の説明.md
Created February 27, 2020 02:34
Unwrap<HTMLDivElement>の型の説明.md

divRef.value の戻り値の方が Unwrap<HTMLDivElement> になっている。 https://github.com/vuejs/vue-next/blob/e67f655b2687042fcc74dc0993581405abed56de/packages/reactivity/src/ref.ts#L106-L118 を見ると、Unwrap<T>は、次のような型定義

  1. cRef, ref, array, objectというキーを持っている
  2. []でキー名にアクセスしているが、その中でConditional Types(型定義では頻出。めちゃ便利)を使っている
  3. ref<HTMLDivElement>()の戻り値の方がUnwrap<HTMLDivElement>だから、 T extends object ? 'object' : 'ref' よりキー名がobject になる
  4. キー名が object なら { [K in keyof T]: UnwrapRef<T[K]> } が返るから、HTMLDivElement型にはならない。
@tonkotsuboy
tonkotsuboy / Unwrap<HTMLDivElement>の型の説明.md
Created February 27, 2020 02:34
Unwrap<HTMLDivElement>の型の説明.md

divRef.value の戻り値の方が Unwrap<HTMLDivElement> になっている。 https://github.com/vuejs/vue-next/blob/e67f655b2687042fcc74dc0993581405abed56de/packages/reactivity/src/ref.ts#L106-L118 を見ると、Unwrap<T>は、次のような型定義

  1. cRef, ref, array, objectというキーを持っている
  2. []でキー名にアクセスしているが、その中でConditional Types(型定義では頻出。めちゃ便利)を使っている
  3. ref<HTMLDivElement>()の戻り値の方がUnwrap<HTMLDivElement>だから、 T extends object ? 'object' : 'ref' よりキー名がobject になる
  4. キー名が object なら { [K in keyof T]: UnwrapRef<T[K]> } が返るから、HTMLDivElement型にはならない。
@tonkotsuboy
tonkotsuboy / FireYourSite.js
Created February 20, 2020 08:31
FireYourSite.js
const linkElement = document.createElement("link");
linkElement.rel = "stylesheet";
linkElement.href =
"https://fonts.googleapis.com/css?family=Noto+Sans+JP:900&display=swap&effect=fire-animation";
document.head.insertAdjacentElement("beforeend", linkElement);
for (const childElement of document.body.querySelectorAll("*")) {
childElement.style.fontFamily = `"Noto Sans JP", sans-serif`;
childElement.classList.add("font-effect-fire-animation");
}
@tonkotsuboy
tonkotsuboy / waitTransitionendEvent.ts
Last active February 18, 2020 02:05
waitTransitionendEvent
/**
* Elementのtransitionendイベントが発火すると解決するPromiseです。
* propertyNameを指定した場合は、該当propertyのtransitionendのみを待ちます。
* @param element
* @param propertyName
*/
export const waitTransitionendEvent = async (
element: Element | null,
propertyName?: keyof CSSStyleDeclaration
): Promise<void> => {
@tonkotsuboy
tonkotsuboy / convenienceType.ts
Last active June 5, 2019 09:15
ある関数の戻り値しか許容しない型を作る
/** seedに応じた名前を生成する関数です */
const createFirstName = (seed: number) => {
switch (seed) {
case 0:
return "鈴木さん";
case 1:
return "後藤さん";
case 2:
return "マリオ";
default: