translation

AIが翻訳した投稿です。

Sunrabbit

TypeScriptでタイプを手動で1つずつ入力していませんか?

プロフィール画像

durumis AIが要約した投稿

  • TypeScriptでタイプを手動で入力するのは、可読性が低下する可能性があり、高階型を使用するとよりクリーンに定義できます。
  • hotscriptライブラリを使用すると、高階型に基づいてタイプ定義を簡潔に管理できます。
  • さまざまな機能を提供するhotscriptライブラリを活用して、コードの可読性を向上させ、必要に応じて活用することをお勧めします。

例として、1つのコードを見てみましょう。

各単語の最初の文字を大文字に変換するコードですね。

const firstLetterUpperCase = (str : string) => {
    return str.split(" ").map(v => ${v.charAt(0).toUpperCase()}${v.slice(1)}).join(" ");
}

console.log(firstLetterUpperCase("hello world"));


シンプルですが、これだとreturn typeがstringになってしまい、型推論が不可能になります。

type FirstLetterUppercase =
    T extends ${infer R}${infer RestWord} ${infer RestSentence}
    ? ${Uppercase<R>}${RestWord} ${FirstLetterUppercase<RestSentence>}
    : T extends ${infer R}${infer RestWord}
    ? ${Uppercase<R>}${RestWord}
    : never;

const firstLetterUpperCase= (str : T) : FirstLetterUppercase => {
    return str.split(" ").map(v => ${v.charAt(0).toUpperCase()}${v.slice(1)}).join(" ") as FirstLetterUppercase ;
}

console.log(firstLetterUpperCase("hello world"));



もちろん、上記のように型を1つずつタイプして行うことができます。

しかし、上記のような型は可読性が良くないと感じます。ネストされた三項演算子と再帰構造が問題でしょう。

しかし驚くべきことに、TypeScriptは高階型をサポートしています。

そして、その高階型に基づいて、高階型ライブラリが1つあります。



このライブラリを使用することで、型定義をきれいに整理することができます。

type FirstLetterUppercase2= Pipe<
    T,
    [
        Strings.Split<" ">,
        Tuples.Map<Strings.Capitalize>,
        Tuples.Join<" ">
    ]
>;

type A = FirstLetterUppercase2<"hello world">;
//   ^? type = "Hello World"


このコードはここにあります。


このように、高階型によって、可読性の高い型整理が可能になりました。

他にも様々な機能があるので、一度サイトにアクセスして見て、必要な時に利用するのが良いでしょう。


Sunrabbit
Sunrabbit
The way to be a senior is to be a senior.
Sunrabbit
まだ関数型ライブラリを使っていますか?関数型プログラミングライブラリの変化とEffectフレームワークの登場を紹介し、Node.js業界に新たな標準を提示する可能性について言及します。

2024年7月30日

[Next.js] ランタイム環境変数の注入Next.jsでビルド後に環境変数を注入する方法を、WindowsおよびUnix環境の両方で動作するように改善する方法について説明します。

2024年3月20日

[オブザーバビリティ] ログコレクターVectorに挑戦Vectorを活用してKubernetesのログをLokiと統合する方法、使用経験、注意事項を共有します。公式ドキュメントの不足とHelm使用時の注意点などを扱います。

2024年3月9日

[Effective Java] アイテム6. 不要なオブジェクト生成を避ける不要なオブジェクト生成はメモリ浪費につながるため、文字列やBooleanなどのオブジェクトはリテラルまたは静的ファクトリメソッドを使用する方が良いでしょう。
제이온
제이온
제이온
제이온

2024年4月28日

ドゥルミスでの最初の投稿ドゥルミスプラットフォームの執筆機能とエディター機能を紹介し、さまざまな書式機能やリンクボックス、水平線などの機能について検討し、改善点を提案します。
이것저것 잡다한 이야기
이것저것 잡다한 이야기
이것저것 잡다한 이야기
이것저것 잡다한 이야기

2024年4月14日

Google Geminiで基本的な質問をしてみる(あなたは誰ですか?)Google AIのGeminiは、膨大なテキストとコードのデータセットでトレーニングされた大規模言語モデルであり、テキストの生成、言語の翻訳、質問への情報に基づいた回答を行うことができます。
Unusual Curiosity: 흔치 않은 궁금증
Unusual Curiosity: 흔치 않은 궁금증
Unusual Curiosity: 흔치 않은 궁금증
Unusual Curiosity: 흔치 않은 궁금증

2024年6月24日

意外と役立つハングル文書編集、ハングル(HWP)のヒントハングル文書編集のヒント!ハンコムオフィスを活用し、字間/ページ分割、段落のインデントなど便利な機能を見てみましょう。
길리
길리
길리
길리

2024年4月5日

TypeScript(タイピングスクリプト)の終焉?(feat 本当に)2023年のプログラミング言語ランキングで5位にランクインしたTypeScriptの終焉論争をまとめました。JavaScriptとの違いと、最近のオープンソースプロジェクトにおけるTypeScriptの撤退の動きを検証します。
렛플
렛플
렛플
렛플

2024年2月20日

LLM(大規模言語モデル)とは?LLMは大規模言語モデルであり、膨大なテキストデータから学習することで、人間と同様の言語を理解し生成する人工知能技術です。
세상 모든 정보
세상 모든 정보
세상 모든 정보
세상 모든 정보

2024年4月1日