タグ Object.create
人気順 10 users 50 users 100 users 500 users 1000 usersBrainfuck 実装で学ぶ TypeScript 型レベルプログラミング - Object.create(null)
およそ 4 年前に「TypeScript で型レベル Brainfuck」という記事を書きました. susisu.hatenablog.com それから 4 年間の間に TypeScript も進化し, 型レベルプログラミングの技法にも大きな変化がありました. 特に顕著な影響があったものでは, TypeScript 4.0 のタプル型の改善 TypeScript 4.1 のテンプレートリテラル... 続きを読む
ESLint の共有設定を Flat Config に対応させる - Object.create(null)
まえがき こんにちは, 人間 ESLint です. そんな人間 ESLint の私ですが, 私一人があらゆるコードに注意深く目を通して, さらに修正案まで提示するというのは大変です. 多くの問題は機械的に検知できるはずなので, そういった仕事を私の代わりにしてくれるメカ人間 ESLint が欲しくなってきます. そんなわけで, 4 年ほど... 続きを読む
中止ボタンがしいたけに見えて困る - Object.create(null)
令和最新版. Vivaldi でアイコンがカスタマイズできるようになっている テーマ設定画面を眺めていたら, Vivaldi 6.0 からツールバーのアイコンがカスタマイズできるようになっているのに気がつきました. 流石 Vivaldi です (?) vivaldi.com しいたけ復活 こうなっては中止ボタンをしいたけにするしかありません. しいた... 続きを読む
TypeScript 型レベル関数型プログラミング in 2023 - Object.create(null)
ちょっと前に話題になった hotscript の技法の紹介やら, ラムダ計算を TypeScript の型にコンパイルする話やらなんやら. 通常の型レベル関数 TypeScript の型エイリアスはパラメータを取れるので, これは型レベルの関数であるとみなせます. type IsNumber<X> = X extends number ? true : false; type A = IsNumber<42>;... 続きを読む
TypeScript エラー処理パターン - Object.create(null)
M 年前にも N 年後にも人類は同じ話をしている. まとめ エラーの発生方法は throw と return に大別できる throw には簡潔さ, return には明瞭さと型安全性といった特徴がある どちらの方法がより適しているかはプログラムの規模, エラーの種類, ハンドリングの方法などが判断の材料になる 実際にどちらの方法を使うかは... 続きを読む
TypeScript で実行時の入力を含む文字列を型で弾く - Object.create(null)
TypeScript (4.7 時点) において, 文字列に付けられる型には以下の 3 つ (とそのユニオン型) があります. 文字列型 string 文字列リテラル型 ("foo" など) テンプレートリテラル型 (`data-${string}` など) これらのうち, 実行時の入力, 特に事前にパターンが想定されていないような任意の入力が含まれるような文字列に... 続きを読む
TypeScript 型レベルプログラミング フリースタイルガイド - Object.create(null)
TypeScript の型レベルプログラミングのための真面目なスタイルガイドではありません. 型なしラムダ計算で喜ぶような人間が使うための諸刃の剣です. この記事の内容は TypeScript の 2022 年 1 月時点での最新版である 4.5.4 に基づいています. 将来のバージョンでの妥当性は保証しません. 「型〜」「〜型」という用語の... 続きを読む
CloudWatch Logs Insights を使って Mackerel 上にアプリケーションのメトリック監視環境を手早く構築する - Object.create(null)
この記事は Mackerel Advent Calendar 2021 の 15 日目の記事です. 昨日は id:kazeburo さんの mkr plugin install 時の403 API rate limit exceededエラーを回避する方法 でした. こんにちは id:susisu です. 普段は Mackerel 開発チームでアプリケーションエンジニアをしています. 先日 mackerelio-labs にて cloudwat... 続きを読む
TypeScript をより安全に使うために その 2: オブジェクトの具体的な形にアクセスするのを避ける - Object.create(null)
前回はこちら. susisu.hatenablog.com 引き続き環境は以下を前提とします: TypeScript 4.4 (この記事を書いている 2021 年 11 月時点の最新版) strict: true 原則: オブジェクトの具体的な形にアクセスするのを避ける ここで「オブジェクトの具体的な形にアクセスする」とは, 静的な型によらずに, 実行時にオブジェクト... 続きを読む
exactOptionalPropertyTypes によせて - Object.create(null)
TypeScript 4.4 に exactOptionalPropertyTypes というオプショナルなプロパティに関するコンパイラオプションが追加されるのを受けて, そもそもオプショナルなプロパティとは何なのか, どう使うと良いのか, exactOptionalPropertyTypes がどう嬉しいのかを考えてみます. あらかじめ私個人の立場を明らかにしておくと, ... 続きを読む
Template String Types でパス文字列を解析してクエリする - Object.create(null)
※この記事に含まれる内容は TypeScript 4.1 のプレビュー版のものです. 今後仕様が変わり動かなくなる可能性もありますのでご注意ください. 話題の template string types で早速遊んでみます. ゴール .foo[1].bar といった形のパス文字列を型レベルで解析してクエリしちゃいます. こういう感じ: type R1 = Query<{ foo:... 続きを読む
テストの説明に安易に「正しく」とか書かない - Object.create(null)
みなさんテストは書いていますよね. 書いていなければふりだしに戻る. 例えば関数 add に対して, 以下のようなテストコードがあるとします. describe("add", () => { it("正しく計算できる", () => { expect(add(1, 2)).toBe(3); }); }); よさそうですね? もしよくないと思うのであればここから下は読まなくても大丈夫だ... 続きを読む
TypeScript で型レベル Brainfuck - Object.create(null)
TypeScript の型システムはチューリング完全ということが知られていますが, 同じくチューリング完全な言語である Brainfuck のインタプリタを実装することで, その計算能力を確認することができます. この記事のコードは TypeScript 3.8.3 で動作確認しています. ゴール 型レベルで Brainfuck のインタプリタを実装しま... 続きを読む
Node.js のパッケージ情報をいい感じに表示するやつを作った - Object.create(null)
ppp という, Node.js のパッケージ情報を表示するコマンドラインツールを作ったのでそのご紹介です. github.com それ npm view で良いじゃん, とか, 前も似たようなの作っていなかった? などと思った方もおられると思いますが, 新しく作ったのにはちゃんと理由がありますので, まずはお読みください... 背景 世の中には ... 続きを読む
「分割」できる疑似乱数生成器 - Object.create(null)
この記事ははてなエンジニア Advent Calendar 2018 の 6 日目の記事です. こんにちは, id:susisu です. Mackerel のアプリケーションエンジニアをしています. 最近は新しいカスタムダッシュボード機能を開発したりしていました. mackerel.io この記事ではタイトルにある通り, ある種の疑似乱数生成器について紹介します.... 続きを読む
差分検出アルゴリズム三種盛り - Object.create(null)
2017 - 10 - 09 差分検出アルゴリズム三種盛り プログラミング こんばんは. 気がつけばもうずいぶんと涼しくなってきました. 勢い余って凍ってしまったりせぬよう, くれぐれも普段の言動にはお気をつけください. はじめに さて, 我々人類にはどうしても二つの文字列 (あるいは行ごとに区切られたテキスト) 間の差分を求めなければいけない瞬間が発生します. 先人たちはそういった時のために d... 続きを読む
Atom のカーソル上下移動を改良するパッケージを作った - Object.create(null)
2017 - 03 - 20 Atom のカーソル上下移動を改良するパッケージを作った JavaScript プログラミング 相変わらず Atom の環境を整備し続けています. というわけでまたパッケージを作りました. atom.io カーソルを上下に動かしたとき, デフォルトではこんな感じに全角文字などが間に入るとカーソルの水平位置がぐちゃぐちゃと動いてしまいます. この動作を修正して見た目通り... 続きを読む
パーサコンビネータを高速化した - Object.create(null)
2017 - 03 - 14 パーサコンビネータを高速化した JavaScript プログラミング 例のアレです. 式年遷宮 したときの話は こちら . github.com 最初は軽い気持ちで細々とした最適化をしていたんです. switch を if に変えるとかいう小手先のアレで 10 % も高速化してウケてる — ボノボ (@susisu2413) 2017年3月13日 インライン化も同時に... 続きを読む
Markdown のテーブルをいい感じに編集する Atom パッケージを作った - Object.create(null)
2017 - 03 - 03 Markdown のテーブルをいい感じに編集する Atom パッケージを作った プログラミング JavaScript 相変わらず既存のものが……だったので作りました. 以前 SyaroNote で Ace 向けに作ったものをベースに色々改良しています. atom.io 動作はこんな感じです. 他にも行の挿入や, 左・右・中央揃えの切り替えなどが簡単にできます. Mar... 続きを読む
Sublime Text から Atom へ乗り換えチャレンジ - Object.create(null)
2017 - 02 - 20 Sublime Text から Atom へ乗り換えチャレンジ プログラミング 日記 なぜ JavaScript を書いているときにやたらと React の スニペット が表示されるようになって *1 , これが大変迷惑だったためです. destroy を補完するために destroy と入力する必要があるのクソでしょ — すしす (@susisu2413) 2017... 続きを読む