タグ

ブックマーク / susisu.hatenablog.com (3)

  • TypeScript で実行時の入力を含む文字列を型で弾く - Object.create(null)

    TypeScript (4.7 時点) において, 文字列に付けられる型には以下の 3 つ (とそのユニオン型) があります. 文字列型 string 文字列リテラル型 ("foo" など) テンプレートリテラル型 (`data-${string}` など) これらのうち, 実行時の入力, 特に事前にパターンが想定されていないような任意の入力が含まれるような文字列に対しては, string や string を含むテンプレートリテラル型を付けることはできても, 文字列リテラル型を付けることはできません. 文字列リテラル型を付けるためには型検査時 (実行の前) に入力文字列の内容がわかっている必要があるので, まあそれはそうですね. このことを利用して, 実行時の入力を含む文字列を与えようとすると型検査に失敗するような関数を作ることができそうです. まずは与えられた型が文字列リテラル型, ま

    TypeScript で実行時の入力を含む文字列を型で弾く - Object.create(null)
    efcl
    efcl 2022/08/17
    SQLクエリのテンプレートパラメータに対する型バリデーション
  • Template String Types でパス文字列を解析してクエリする - Object.create(null)

    ※この記事に含まれる内容は TypeScript 4.1 のプレビュー版のものです. 今後仕様が変わり動かなくなる可能性もありますのでご注意ください. 話題の template string types で早速遊んでみます. ゴール .foo[1].bar といった形のパス文字列を型レベルで解析してクエリしちゃいます. こういう感じ: type R1 = Query<{ foo: number }, "">; // R1 = { foo: number } type R2 = Query<{ foo: number }, ".foo">; // R2 = number type R3 = Query<[number, string, boolean], "[1]">; // R3 = string type R4 = Query<{ foo: { bar: string } }, ".fo

    Template String Types でパス文字列を解析してクエリする - Object.create(null)
    efcl
    efcl 2020/09/03
    TypeScript 4.1のTemplate String Typesでlodash.getみたいなの型をつける
  • 差分検出アルゴリズム三種盛り - Object.create(null)

    こんばんは. 気がつけばもうずいぶんと涼しくなってきました. 勢い余って凍ってしまったりせぬよう, くれぐれも普段の言動にはお気をつけください. はじめに さて, 我々人類にはどうしても二つの文字列 (あるいは行ごとに区切られたテキスト) 間の差分を求めなければいけない瞬間が発生します. 先人たちはそういった時のために diff のようなツールを開発し, それを利用することで文明はめざましい発展を遂げてきました. しかしながら, 使用するアルゴリズムを比較検討したい場合, 「差分」の定義を変えるなどして既存のアルゴリズムに変更を加えたい場合, diff のない異世界に飛ばされて自分で実装しなければいけない時などにおいては, 差分検出アルゴリズムについての理解が必要不可欠です. というわけで, この記事では文字列間の差分検出とは何かということと, 差分を求める三種類のアルゴリズムの紹介・解説

    差分検出アルゴリズム三種盛り - Object.create(null)
    efcl
    efcl 2017/10/11
    diff アルゴリズム
  • 1