タグ

TSに関するdorapon2000のブックマーク (10)

  • neverthrow で局所的に Result 型を使い、 try-catch より安全に記述する

    Result 型 (類似するものとして Either Monad の方が有名かもしれません) を導入する場合、アプリケーション全体の設計を変えたり、全箇所を書き換える必要はありません。 neverthrow は部分的に使用でき影響範囲も閉じるので、局所的に使い始めることができます。 (Rust のような) Result 型 とは ざっくり言うと関数の処理の結果と成否を 1 つの型 Result<T, E> で表したものです。(T は期待する結果の型、 E はエラーを表現する型) 筆者は詳しくはないのですが、 Haskell 等にある Either<L, R> とは厳密には違うようです(Either は両方の値が使用可能であることを前提としている?) 参考: Rust ではなぜ、Either 型ではなく Result 型を採用しているのか neverthrow とは TypeScript

    neverthrow で局所的に Result 型を使い、 try-catch より安全に記述する
    dorapon2000
    dorapon2000 2024/05/13
    “neverthrow とは TypeScript で Result 型を実現するためのライブラリです。”
  • フロントエンドのスピードに置いていかれたので、よく聞く技術を調べて分類してみた

    元フルスタックエンジニア(死語)をやらせていただいていたものです。 JavaScript(TS)周りの進歩が凄く、あまりにもついていけていなかったので、気になったワードを片っ端から整理してみました。 それぞれに対する説明の正しくないものが含まれてしまっている可能性があります。 そんなところを見つけたときは優しく教えてくださると助かります。 各ツールの詳細というよりは、それぞれがどんな役割のものなのかを記載しています。 この記事が誰かの助けになれば幸いです。 調査・分類した言葉(技術)たち Hono Bun Deno Biome Vite Webpack Turbopack esbuild Babel SWC Prisma まず上記に上げたものが、どういった機能を持つものなのかもわかりませんでした。 それを整理すると以下になるようです。 JavaScript Runtime Deno Bun

    フロントエンドのスピードに置いていかれたので、よく聞く技術を調べて分類してみた
  • ファイル直下でexportされている関数にjest.spyOnを使いたい | DevelopersIO

    こんにちは。サービスGの金谷です。 JestにはspyOnという便利なメソッドが用意されています。 Jestオブジェクト · Jest これを使うとJestでのテスト時に指定したメソッドがコールされているかどうかを確認できたりします。 具体的な使い方のイメージは先輩が書かれているこちらの記事が参考になると思います。 jest.spyOn() で Vue.js コンポーネントからのサービス呼び出しをテストする 公式ドキュメントを見ると第一引数にObject、第二引数にメソッド名(文字列)を受け取ると書かれています。 jest.spyOn(object, methodName) では、オブジェクトのメソッドではない、ファイル直下でexportされている関数にはどう使ったらいいの・・・? と思ったので調べてみました。 以下のようなコードを想定します。 helloWorldService.ts e

    ファイル直下でexportされている関数にjest.spyOnを使いたい | DevelopersIO
    dorapon2000
    dorapon2000 2023/12/06
    “以下のように * asを使ってあげると上手くいきました。 default exportしている場合は関数名がdefaultになるので注意しましょう。”
  • NestJS Way より TS Way を意識したバックエンド設計事例と Tips - Mobile Factory Tech Blog

    こんにちは!BC チームでエンジニアをしている id:d-kimuson です。 最近、弊チームで構築した社内向け Web API のバックエンド設計をしたので事例として紹介しようと思います。 フレームワークとして NestJS を採用していますが、NestJS Way よりも TS Way を意識した設計をしており、このエントリの主題でもあるため、TS Backend の設計事例として読んでいただければと思います。 対象システムの概要 社内の他サービス向けの Web API で、他チームのサービスを経由してエンドユーザーに届く中間システム チーム内のサービスからもチーム外のサービスからも叩かれる想定 チーム外からも叩かれるため、なんらかのスキーマを共有したいというモチベーションがある → 2023 年現在で標準的な OpenAPI Specification (以後 OAS と呼びます)

    NestJS Way より TS Way を意識したバックエンド設計事例と Tips - Mobile Factory Tech Blog
    dorapon2000
    dorapon2000 2023/11/28
    型駆動でドメインのデータ構造を宣言し、ふるまいを関数として分離する関数型的なアプローチのほうが相性が良いと考えています。
  • JavaScriptでObjectじゃなくMapを使う場面の一例 - Qiita

    例題 与えられた文章に対し、単語の数を数え上げる関数を作ってみましょう。 ある一つの単語ではなく、出てくる単語全部について数えます。 function countWords (text) { // ??? } const text = 'base base kick kick base kick kick' const counts = countWords(text) console.log(counts) // -> 'base'が3個!'kick'が4個! function countWords (text) { const words = text.split(' ') // 単語と数のペアを並べた配列をこれから作っていきます。 // 例:[['base', 3], ['kick', 4]] const wordAndCountPairs = [] for (const word

    JavaScriptでObjectじゃなくMapを使う場面の一例 - Qiita
    dorapon2000
    dorapon2000 2023/10/16
    “他にも「属性とかメソッドとかじゃなくて、単にキーと値を並べたいだけなんだよなぁ」という時にはMapを使いましょう。 キーが動的な場合は大体Mapが適しています。”
  • 私がthrowを使わない理由

    この記事について JavaScriptではthrow文という文を使うことで例外を投げることができます。 このthrow文ですが、私はレビューなどで例外を投げないでくださいというコメントをするのですがその理由とどのようにコードを変更すればよいのか、ということを書いておこうと思いました。 前提条件 この記事の内容は下記の条件を前提として書き進めていきます。 TypeScriptを採用していること フロントエンド開発の場合 Node.jsを利用したサーバーサイドのコードやCLIツールの開発、各種ライブラリの開発については記事の対象に含まれないことをご了承下さい。 結論 先に結論から書いておくとTypeScriptを利用している場合例外はカスタムエラーを返却するか、Result型を利用するのがよいと思っています。 次の章からサンプルコードを用いながらthrow文を使った実例と、代替え案について記

    私がthrowを使わない理由
    dorapon2000
    dorapon2000 2023/09/29
    “このように例外を投げるのではなく、エラーを返却することにより利用側ではError型が含まれるため失敗する可能性のある関数であることが分かります。”
  • TypeORMのData Mapperパターンにおけるリレーションの型安全性を担保する - Mobile Factory Tech Blog

    こんにちは!BC チームでエンジニアをしている id:d-kimuson です。 今回は外部リレーションに関して型安全性の乏しい TypeORM の Data Mapper パターンを独自のユーティリティ型を使ってちょっとマシにする方法を紹介します。 前提: TypeORM の外部リレーションについて TypeORM では ManyToMany 等のデコレータを使ってスキーマに Foreign Key を書くことができます。 // 公式ドキュメントのサンプルです @Entity() export class Category { @PrimaryGeneratedColumn() id: number @Column() name: string @ManyToMany((type) => Question, (question) => question.categories) quest

    TypeORMのData Mapperパターンにおけるリレーションの型安全性を担保する - Mobile Factory Tech Blog
  • GitHub - type-challenges/type-challenges: Collection of TypeScript type challenges with online judge

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - type-challenges/type-challenges: Collection of TypeScript type challenges with online judge
  • TypeScriptで0~nまでの整数だけを取る型を作る - Qiita

    type Range< N extends number, Result extends number = never, C extends never[] = [], > = C['length'] extends N ? Result : Range<N, Result | C['length'], [...C, never]>; このRange型はRange<3>とすると0 | 1 | 2、Range<101>とすると0 | 1 | ... | 100のような型を生成します。 この型はCを目安に指定した数値まで再帰的に呼び出して目的の型を取り出します。 型引数のNは上限の数値、Resultは最後に返す型で初期値はneverにしています(つまりRange<0>はneverです。)。Cは再帰数の目安に使う型で初期値が[]のnever型の配列です。再帰数は配列の長さC['length']を

    TypeScriptで0~nまでの整数だけを取る型を作る - Qiita
  • Branded Typesを導入してみる / TypeScript一人カレンダー

    こんにちは、クレスウェア株式会社の奥野賢太郎 (@okunokentaro) です。記事はTypeScript 一人 Advent Calendar 2022の18日目です。昨日は『NonNullable<T>と実例 assertExists()』を紹介しました。 Nominal TypingとStructural Typing あらゆるプログラミング言語において、型付けという機構は言語ごとに異なります。このアドベントカレンダーで紹介している型はいずれもTypeScriptのためのもので、これらが他の言語、Java, Scala, Rust…などですべて互換な知識かというと、まったくそんなことはありません。包括的な概念としては似通う部分も多々ありますが、言語ごとに「この言語はどういった型付けの機構を有しているのか」を理解するのが好ましいです。それは言語ごとに処理系が異なり、用途が異なり、

    Branded Typesを導入してみる / TypeScript一人カレンダー
    dorapon2000
    dorapon2000 2023/09/01
    “このように、Brand<K, T>型を宣言しておくことで、number型でありながら異なる構造をとるように__brandというダミープロパティを定義し、Tによって型が一致しないようにして”
  • 1