タグ

TypeScriptに関するmaecchiのブックマーク (67)

  • TypeScriptのパフォーマンス改善

    2024/05/11に行われたTSKaigiで発表したLTの資料です! ◎概要 TypeScriptJavaScriptのスーパーセットとして、静的型付けと高度な型システムを提供し、大規模なプロジェクトの開発を助けています。しかし、これらの利点を最大限に活用するためには、コンパイルパフォーマンスの最適化が不可欠です。コンパイル速度を上げることでビルド時間やテスト実行時間の削減を行うことができます。今回の発表では、TypeScriptのコンパイルパフォーマンスを改善するための具体的な手法とその背後にある理論をいくつか紹介します。 ◎内容 1. TypeScriptのパフォーマンスとは何か、そしてなぜそれが重要なのか 2. コンパイル速度を改善するための具体的な手法とその背後にある理論 資料で紹介している内容については以下の記事で詳しく記載していますので合わせて参照していただければと思いま

    TypeScriptのパフォーマンス改善
    maecchi
    maecchi 2024/05/12
    自分の環境の型定義をintefaceにすべて変更したらどのくらい変わるか試してみるかな
  • Announcing TypeScript 5.5 Beta - TypeScript

    Today we are excited to announce the availability of TypeScript 5.5 Beta. To get started using the beta, you can get it through NuGet, or through npm with the following command: npm install -D typescript@beta Here’s a quick list of what’s new in TypeScript 5.5! Inferred Type Predicates Control Flow Narrowing for Constant Indexed Accesses Type Imports in JSDoc Regular Expression Syntax Checking Iso

    Announcing TypeScript 5.5 Beta - TypeScript
    maecchi
    maecchi 2024/04/28
    関数からtype predicatesを推論できるようになるのは自分にとっては便利になりそう
  • コードフォーマッターとしてBiomeを使う

    Web 開発のための高速なツールチェーンである Biome が使われることが増えてきました。今のところ、linterformatter の機能を備えています。 普段、JavaScript および TypeScript プロジェクトのコードフォーマッターには Prettier を使っていますが、速度面の魅力がある biome を使って見ました。ESLint で使いたいルールや plugin があるので、lint 機能は使わないで ESLint に任せる前提です。 この記事では、biome をコードフォーマッターとしてだけ使うケースにフォーカスして書きます。 セットアップ ドキュメントに従ってセットアップするだけなので、導入はシンプルだと思います。

    コードフォーマッターとしてBiomeを使う
    maecchi
    maecchi 2024/04/07
    本文にも書かれていますが新しい構文のサポート速度が気になります。
  • TypeScript 5.5で型述語を推論できて最高。配列のfilterも型安全に

    TypeScriptの次バージョン5.5で、開発者が長い間求めていた挙動が手に入ります。 現状のTypeScript (執筆時点で5.4)では、ユーザー定義型ガードを使う際には型述語(用語は後ほど解説します)の記述が必要です。 function isNumber(value: number | string): value is number { return typeof value === 'number'; }

    TypeScript 5.5で型述語を推論できて最高。配列のfilterも型安全に
    maecchi
    maecchi 2024/03/24
    型術後の型推論は時々使っているから導入されると楽になりそう
  • TypeScriptで知ってコードの安全性が上がったtips集

    TypeScriptを用いた開発では、その型システムを活かしてランタイムエラーを事前に防いだり、実装漏れを防いだりとコードの安全性の向上を図ることができます。 記事では、個人的に知ったおかげでコードの安全性が増した!と感じたtipsをまとめました。 ※ なお、linterを用いたコードの安全性向上も非常に有効ですが、この記事では主にTypeScriptの型システムに焦点を当てています。 tips集 配列周りのtips まずは配列を扱う際に役立つ、tipsを紹介します。 配列からUnion型を作成する ↓のように(typeof array)[number]で配列の全要素を持つUnion型を作成できます。 const fruits = ["apple", "banana", "lemon"] as const; type Fruit = (typeof fruits)[number]; //

    TypeScriptで知ってコードの安全性が上がったtips集
    maecchi
    maecchi 2024/03/20
    type-challengesはまだ全部終わっていないから少しずつ進めていこう
  • Next.js App Router での i18n 対応例

    概要 色々あって参画している案件で Next.js の App Router への移行を主導する立場になりました。 なかでも i18n 対応が結構骨が折れた印象でした。 いろんな記事を見たが Server Component (以下、SC) に対応しているものが見当たらなかった Root layout にて Provider でラップするとかはあった けどそれだと Client Component (以下、CC) になるのでは(実際にハンズオンで確認まではしてないけど) Next.js の公式ドキュメントで SC の対応例は掲載されていた ただ、 スクラッチ実装なりの問題点はある[1] react-i18next とか next-i18next を使った方がインターフェースの統一性が取れる デファクトなパッケージであれば使用経験者も多い i18nライブラリは複数形や文脈に応じた翻訳、フォー

    Next.js App Router での i18n 対応例
    maecchi
    maecchi 2024/02/11
    App Routerを利用する際に参考にするかも
  • GraphQLのスカラーとTypeScriptの考察

    皆さんこんにちは。筆者は最近、TypeScriptからGraphQLを使用するためのコード生成ツールnitrogqlを開発しています(初手宣伝)。 直近は、GraphQLのスカラーに関する機能拡張を行っていました。この記事では、そこで得た知見と考察について共有します。 GraphQLのスカラーとは GraphQLにおけるスカラーとは、それ以上分解できないデータ型のことです。GraphQLのデータはスカラー・オブジェクト・enumに分類でき、データの末端はスカラーまたはenumになります。 GraphQL仕様では組み込みのスカラー型が定義されており、以下のものがあります。 Int Float String Boolean ID また、カスタムスカラーとして、追加のスカラー型をスキーマ上で定義することもできます。 スカラー値がサーバー・クライアント間でやり取りされるときはシリアライズする必要が

    GraphQLのスカラーとTypeScriptの考察
  • 2023 年の Prettier 振り返り

    2023 年の Prettier の活動を振り返ります。 Prettier とは Prettier は JavaScript で書かれたコードフォーマッタです。設定可能な項目が少ないいわゆる opinionated なコードフォーマッタです。JavaScriptTypeScript だけではなく、HTMLCSSGraphQL などもサポートしています。 リリース 2023 年は、メジャーバージョンのリリースが 1 回、マイナーバージョンのリリースが 1 回でした。これまでは 3 ヶ月に 1 回程度マイナーバージョンをリリースしていたので、頻度は少し下がっています。 ですが、メジャーバージョンである 3.0 をリリースできたことと、これまでよりもカジュアルにパッチバージョンをリリースするようになったことを考えると、開発自体が停滞しているわけではないと思っています。 「カジュアル

    2023 年の Prettier 振り返り
    maecchi
    maecchi 2023/12/28
    メジャーバージョンが上がったのは本当に久しぶりだった。
  • ナメやがってこの型ァ!!超イラつくぜぇ~~~~~ッ!!

    const colors = ["赤","青"] as const; type Colors = typeof colors[number]; //"赤" | "青" typeof colors[number]・・・ってよォ~~~~~ typeofはわかる。スゲーよくわかる TypeScritの世界では、typeofで変数から型を作れるんだよなァ だがnumberってのはどういう事だああ~~~~っ!? 配列にnumberを渡せるかっつーのよ───────ッ!! ナメやがってこの型ァ!! 超イラつくぜぇ~~~~ッ!! 解説 これはよォ 「Lookup Type」ってやつらしいぜぇ たとえばよォ 👇みたいに書くとPerson型からプロパティの型を取り出せるよなァ~?? type Person = { name: string, age: number } type name = Person

    ナメやがってこの型ァ!!超イラつくぜぇ~~~~~ッ!!
    maecchi
    maecchi 2023/11/12
    Distributive Conditional Typesは理解がし辛いからあまり使いたくはないですね・・・
  • ESLint を使い倒す(おすすめルール紹介)

    前書き ESLintJavaScript, TypeScript のための静的検証ツールです。 ESLint を活用することで、コーディング規約やベストプラクティスを機械的に強制することによりコードレビューの手間を省き、番環境でのエラーやパフォーマンスの悪化を抑制することができます。 TypeScript を使っているプロジェクトでは、パーサーを適切に設定すれば型情報を用いたより精密な静的検証を行うこともできます。 eslint を使う際、 eslint:recommended, plugin:@typescript-eslint/eslint-recommended などの各 eslint plugin の推奨 config のみを使って済ませたり、 eslint-config-airbnb などの config のみに頼ることも多い印象ですが、 recommended conf

    ESLint を使い倒す(おすすめルール紹介)
    maecchi
    maecchi 2023/10/08
    型周りの設定は再度見直してみようかな
  • TypeScript のドキュメンタリーの公開など : Cybozu Frontend Weekly (2023/09/26号)

    TypeScript のドキュメンタリーの公開など : Cybozu Frontend Weekly (2023/09/26号) こんにちは! サイボウズ株式会社フロントエンドエンジニアの nissy です。 はじめに サイボウズでは毎週火曜日に Frontend Weekly という「1 週間の間にあったフロントエンドニュースを共有する会」を社内で開催しています。 今回は、2023/09/26 の Frontend Weekly で取り上げた記事や話題を紹介します。 取り上げた記事・話題 Node v20.6.0 (Current) | Node.js Node.js v20.6.0 のリリースブログです。.env ファイルのビルトインサポートや import.meta.resolve がフラグなしで利用可能になる等の更新が行われています。 Chakra, Panda and Ark -

    TypeScript のドキュメンタリーの公開など : Cybozu Frontend Weekly (2023/09/26号)
  • React + TypeScript: useMemoフックの使い方と使いどころ - Qiita

    import { useMemo } from "react"; export const TodoList: FC<Props> = ({ todos, tab }) => { const visibleTodos = useMemo(() => filterTodos(todos, tab), [todos, tab]); }; 引数 calculateValue: キャッシュする値を計算する関数。純粋で、引数は取らず、任意の型の値を返さなければなりません。Reactは、まず最初のレンダー時に関数を呼び出し、値が返されます。次回以降のレンダリングについてはつぎのとおりです。 直前のレンダー時と依存値が変わっていないとき: Reactは前と同じ値を返します。 直前のレンダー時から依存値が変わった場合: calculateValueが呼び出され、返されるのは新たな結果です。値はあとで使える

    React + TypeScript: useMemoフックの使い方と使いどころ - Qiita
  • React + TypeScript: カスタムフックでロジックを再利用する - Qiita

    React公式サイトのドキュメントが2023年3月16日に改訂されました(「Introducing react.dev」参照)。稿は、応用解説の「Reusing Logic with Custom Hooks」をかいつまんでまとめた記事です。ただし、コードにはTypeScriptを加えました。反面、初心者向けのJavaScriptの基礎的な説明は省いています。 なお、シリーズ解説の他の記事については「React + TypeScript: React公式ドキュメントの基解説『Learn React』を学ぶ」をご参照ください。 Reactには、useStateやuseContext、useEffectなどさまざまな組み込みフックが備わっています。けれど、もっと特定の目的に応じたフックが必要になることもあるでしょう。たとえば、つぎのような用途です。 データの取得。 ユーザがオンラインかど

    React + TypeScript: カスタムフックでロジックを再利用する - Qiita
  • GraphQL Gatewayはフロントエンド開発を幸せにする

    はじめに マイクロサービスの開発では、サービスが増え続けるバックエンドに対して、フロントエンドは接続先が増えるため、開発効率を下げてしまいます。その対策として、さまざまな設計パターンが存在します。 弊社の開発ではGraphQL Gatewayを用いていますが、そこに至るまでや周辺の技術/アーキテクチャを解説します。 マイクロサービスとフロントエンド マイクロサービスを採用する場合、フロントエンド(ウェブアプリケーション、モバイルアプリケーションなど)は複数のサービスとの連携が必要になることが多いです。各マイクロサービスは通常、API(REST、gRPCなど)を提供し、フロントエンドはこれらのAPIを通じてデータの取得や操作を行います。 API Gateway API Gatewayは、フロントエンドとマイクロサービス間の中間に位置するコンポーネントとして機能し、マイクロサービスアーキテクチ

    GraphQL Gatewayはフロントエンド開発を幸せにする
    maecchi
    maecchi 2023/08/13
    どちらも強い型のシステムだから合わせると型に関しては強力ですよね。
  • ESLint を使って JSDoc / TSDoc の記述を必須化する

    これはなに コードベースに対し JSDoc の記述を必須化するための ESLint 設定手順をまとめたものです。 JSDoc を始めとする Doc コメントはコードに最も近いドキュメントであり、これがあるのと無いのとではコードベースの保守性に天と地ほどの差が生まれます。そんな JSDoc ですが、OSS ならともかく(内製・受託を問わず)商業ソフトウェア開発の現場では軽視されがちです。後からコーディング規約を定めたところで開発メンバーにドキュメントを書く習慣が備わっていなければ書き漏れが頻発するのが関の山です。 コードレビューで都度指摘するにはあまりにコストがかかるため、ESLint に委ねるのが望ましいです。 前提 フレームワークは React(or Next.js)を使っている。 TypeScript を主体としている。 ビルドスクリプトや設定ファイルは JavaScript も併用し

    ESLint を使って JSDoc / TSDoc の記述を必須化する
    maecchi
    maecchi 2023/07/30
    コメントで指摘するよりもプラグインで指摘してあげたほうがコメントしづらい人にとっては良いかも
  • typescript-eslint v6 アップデートガイド

    typescript-eslint v6 リリース! 2023/07/10 に typescript-eslintv6 がリリースされました。 メジャーバージョンアップということで多くの BreakingChange があるのですが、その中でもReworked Configuration Namesと呼ばれる変更は利用者に大きな影響を与えそうです。 Reworked Configuration Namesはざっくり言うと「config に書くrecommendedのようなルールセットの名前や枠組みが変わるよ」という変更です。 ルールセットの名前だけでなく、含まれるルールや分類自体に変更があるので、設定ファイルを v5 のままアップデートしてしまうと意図したルールセットと異なる設定になってしまいます。 ここでは上記の記事にある変更点を紹介しつつ、なるべく既存の設定のままアップデートする

    typescript-eslint v6 アップデートガイド
    maecchi
    maecchi 2023/07/23
    ルールセット変更されているから見直しておこう
  • TypeScriptの型情報を使って、サポート対象のブラウザが実装してないメソッドの利用をエラーにするESLintルール

    TypeScriptの型情報を使って、サポート対象のブラウザが実装してないメソッドの利用をエラーにするESLintルール eslint-plugin-typescript-compatはTypeScriptプロジェクト向けのESLintルールです。 このESLintではサポートしているブラウザが、実装していないメソッドを検知してLintエラーにしてくれます。 JavaScriptではメソッドの静的解析は難しい(メソッド名が同じでも独自実装の可能性があるため)ですが、TypeScriptの型情報を使って静的解析をしています。 サポートしている機能 [ ] JavaScriptのビルトインオブジェクト [x] プロトタイプメソッド Array.prototype.find [x] 静的メソッド Array.from [ ] オブジェクト Promise [ ] DOM API的にメソッド

    TypeScriptの型情報を使って、サポート対象のブラウザが実装してないメソッドの利用をエラーにするESLintルール
    maecchi
    maecchi 2023/03/19
    Typescript5.0系で1.0.0系になったのですね
  • [TypeScript]二次元配列からundefinedを取り除きつつ、型も除いた情報で定義する | DevelopersIO

    t_o_dと申します。 map関数で生成された配列等、配列内にundefinedが入るケースがあります。 その際にfilterで取り除くのですが、単純な条件だと型情報にはundefinedが残ったままです。 そこで今回は型もundefinedを取り除いた情報になるようにfilterする方法を記録いたします。 環境 mac OS Ventura 13.2.1 typescript 4.9.5 修正前 修正前のコードは以下の通りです。 // 型 : ((string | number)[] | undefined)[] const members = [ [1, "takahashi"], [2, "kato"], undefined, [4, "saito"] ] // 型は「((string | number)[] | undefined)[]」のまま const selections =

    [TypeScript]二次元配列からundefinedを取り除きつつ、型も除いた情報で定義する | DevelopersIO
  • TypeScript で仕様が一目瞭然な定数ファイルを書く

    オブジェクトの中に、定数をフラットに列挙しただけの定数ファイルを書いていませんか? 私は、フロントエンドの開発において、 JavaScript の簡潔なオブジェクト記法 TypeScript による型チェック / IDE 等による入力補助 を活用した保守性の高い定数ファイルの書き方を日夜研究しているので、4つのポイントに着目して解説しようと思います。 この記事で求める「保守性」 網羅的に視認しやすいこと 会社/文化によって異なるかも知れませんが、 「全てのフィールド(ラベル・説明文・バリデーションエラー文言)」のような情報が仕様ドキュメントの中でまとめて管理されている状況では、コードの側でも文書の構造に合わせて情報をまとめて配置すれば、仕様と実コードを見比べるのがラクになるのかな...?と考えています。 また、単純に仕様上重要な情報がボリューミーなコードの中に埋もれやすいので、定数ファイル

    TypeScript で仕様が一目瞭然な定数ファイルを書く
    maecchi
    maecchi 2022/11/27
    定数周りは時間が経つと煩雑になりがちなので参考にしよう
  • tsconfig.json 設定項目備忘録

    型推論オプション 型推論の結果が変わるもの。 ⭐strict ... 以下のセット alwaysStrict strictNullChecks T | null や T | undefined が T に縮退しなくなる。 例 strictBindCallApply Function の各種メソッドが any に縮退しなくなる。 例 strictFunctionTypes コールバック関数の引数が共変でもunifyするようになる結果、型変数の推論優先度が変わることがある。 例 strictPropertyInitialization noImplicitAny 宣言型がない場合にflow typeが使われる機会が増える。 例 noImplicitThis thisの宣言型がない場合に文脈から型が決定される機会が増える。 例 useUnknownInCatchVariables catch (

    tsconfig.json 設定項目備忘録
    maecchi
    maecchi 2022/11/20
    自分も忘れないように備忘録として