タグ

TypeScriptに関するshunkeenのブックマーク (17)

  • TypeScriptでGeneric Typeに対するNarrowingをしたかったけど現在のところ対応していなかった - Mitsuyuki.Shiiba

    最初にまとめ 現在のTypeScript(2024-09-19時点のバージョン5.6.2)では Generics と Control Flow Analysis は、いい感じには連携しないということを学んだ。 どういうこと?その1 Genericsを使って型安全にやりたいなぁと思って、こんなコードを書いてみてもコンパイルエラーになる。 type Mapping = { a: boolean, b: string, } function getValue<K extends "a" | "b">(key: K): Mapping[K] { if (key === "a") { return true; } return "foo"; } このコードでやりたいのは「パラメータとして"a"を渡すとboolean型の値を、"b"を渡すとstring型の値を返す」ということ。key === "a"の

    TypeScriptでGeneric Typeに対するNarrowingをしたかったけど現在のところ対応していなかった - Mitsuyuki.Shiiba
    shunkeen
    shunkeen 2024/09/22
    “「タグ付きユニオンのタグを指定して、型安全に値を取り出したい」”/これをごにょごにょ進めていくと多相バリアントになって拡張可能なパターンマッチが書けるようになるやで
  • 空でない配列を型で表現する正しい方法【TypeScript】

    TypeScriptでは配列が空でないことを型レベルで表現できます。 この記事ではその型をNonEmptyArray<T>と書くことにします。 結論だけ先に書くと、次のように定義するのが正しいです。 export type NonEmptyArray<T> = [T, ...T[]] | [...T[], T] 現在ネット上では上記とは異なる、少し不具合のある型定義が紹介されているので要注意です。 それらも含めて簡単に解説します。 よくある間違いその1:T[] & { 0: T } 2つあるうち最初に紹介するのはこの型定義です。[1]

    空でない配列を型で表現する正しい方法【TypeScript】
    shunkeen
    shunkeen 2023/08/02
    先頭と末尾だけ考慮するでOKなら、先頭だけの型定義も仕様によってはOKなんじゃなかろうか。例えば、[...array, 4, …array]のように中間に要素を追加した場合を、この記事で提案している型定義も捉えきれていないし。
  • My new error...

    2023 年度の僕のエラーハンドリング について書きたい。 昨日Safe Data Fetching in Modern JavaScriptを読んでいて、fetch に限った話ではないが一家言ある内容だったので書きたくなった。 おそらくやりすぎだとか非効率と言われる点はあると思うので、みんなの一家言も教えて欲しい。 対象は Typescript での サーバー開発想定だが、TS であればクライアント開発にもほとんどに当てはまる話だと思う。 例外のスローではなく Result 型を使う Result は失敗するかもしれないという文脈を与えてくれる型 エラーハンドリングの戦略として例外を投げるのではなく、Result 型を返すやり方がある。 Result 型というのは export type Result<T, E> = Ok<T> | Err<E>; export interface Ok

    My new error...
    shunkeen
    shunkeen 2023/01/19
    モナドや鉄道指向の話は脇においておくとして。単なる値のほうが型が付けやすいし、対処方法を単なる関数として書きやすいし、ライブラリも再利用しやすいのはありそう。まあ、チームで合意を取るのが一番大事か
  • 【TypeScript】配列の型を絞り込むときはflatMapがおすすめ

    こんにちは。 スペースマーケットでフロントエンドエンジニアをしているmizukiです! 今回はタイトルの通り、配列で型を絞る際にflatMapを使うのがおすすめだよ!といった話をします。 配列から特定のデータを排除する 例えば、配列からnullableな値を消したいとします。 その場合は以下のようなコードになります。 const nullableArray: Array<string | null> = ['hoge', null, 'fuga'] const array = nullableArray.filter((data) => { return !!data }) ただ、この場合だと型定義としてはnullが排除されたことを認知できず、変数arrayの型は引き続きArray<string | null>と認識されてしまいます。 isを使って型を絞り込む 先ほどの場合、期待値としては

    【TypeScript】配列の型を絞り込むときはflatMapがおすすめ
    shunkeen
    shunkeen 2022/12/29
    MonadPlus的なアレね([]がmzeroになるからfilterできる的な曖昧な知識)。しかし、そこまで型を気にするなら`flatMap(x => x == null ? [] : [x])`と書きそうなもんだが、どうなんじゃろか。`[x]`にしないと予期せぬ平坦化がおきそう…
  • TypeScript 10年の歩み - Qiita

    TypeScriptは、2022/10/01に10周年を迎えました。 ということで、それを記念してMicrosoftの中の人が振り返りのエントリーを書いていました。 以下は該当の記事、Ten Years of TypeScriptの紹介です。 Ten Years of TypeScript 2022年10月1日は、TypeScript10歳の誕生日です。 10年前の今日、2012年10月1日に、TypeScriptは初めて公にされました。 The Early Days 初めてTypeScriptが表に現れたとき、それももっともなことでしたが、多くの否定的な意見がありました。 一部のJavaScriptユーザにとって、JavaScriptに型を強制する試みは冗談か邪悪な陰謀のように見えたかもしれません。 しかし、その試みには、多くのメリットがありました。 型チェックのおかげで、ファイルを保存

    TypeScript 10年の歩み - Qiita
    shunkeen
    shunkeen 2022/12/21
    “型なんか最初は全部anyでかまいません。こんなこと言うとすぐプロとかエキスパートとかいう人たちが棍棒で殴りかかってくるのですが華麗に無視しましょう。”/笑った。漸進的型付けに合わせた漸進的導入とな
  • TypeScriptにおける配列の共変性

    const animal: Animal = { animal: "string", }; const dog: Dog = { animal: "string", dog: "string", }; いま,Dog <: Animalです. <:という記号は2つの型のあいだに書いて,「左の型が右の型のサブタイプである」と読みます. TypeScriptの型システムは構造的なので,2つのオブジェクトがサブタイプ関係にあるには,それらに共通するプロパティについてもまた,サブタイプ関係が必要1です. 今回の例では,DogとAnimalに共通するanimalプロパティについてstring <: stringなのでOKです. TSでは,S <: TならばT型の変数にS型の値を代入できます. つまり,Dog <: Animalなので Animal型の変数にDog型の値を代入できます.

    TypeScriptにおける配列の共変性
    shunkeen
    shunkeen 2022/12/15
    “「反変」ってなんて読むのが正しいんですかね?私は過去「はんぺん」と読んでいたのですが,ある日知り合いから「おでんかよwww」とバカにされたのが悔しくて「はんへん」に矯正したという事情があります”
  • TypeScript で実行時の入力を含む文字列を型で弾く - Object.create(null)

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

    TypeScript で実行時の入力を含む文字列を型で弾く - Object.create(null)
    shunkeen
    shunkeen 2022/08/13
    “与えられた型が文字列リテラル型, または文字列リテラル型のユニオン型かどうかを判定する述語が定義できます. できるんです.”>スゲ〜。#ZigLang のcomptime装飾子みたいなものを#TypeScript の型再帰関数で実現できるのか
  • TypeScriptで条件分岐時の可読性の高い変数設定 - Qiita

    記事を対象とする人 TS,JSで極力letではなくconstを使うべきと思っている人 結論 ts-patternが便利 https://github.com/gvergnaud/ts-pattern 解説 何かのオブジェクトを参照して場合分けして、変数を定義したい場合があると思います 例 let platform = ''; if (game.name === 'ff3') { platform = 'fc'; } else if (game.name === 'ff4') { platform = 'sfc'; } const platform = (() => { if (game.name === 'ff3') { return 'fc'; } else if (game.name === 'ff4') { return 'sfc'; } return ''; })(); //--

    TypeScriptで条件分岐時の可読性の高い変数設定 - Qiita
    shunkeen
    shunkeen 2022/08/04
    const p = (g, c) => game.genre === g && (c == null || game.company === c); const gameName = (() => { switch (true) { case p('rpg', 'enix'): return 'dq1'; case p('rpg', 'nintendo'): return 'pokemon'; case p('rpg'): return 'ff1'; …; default: return ''; } })();
  • wip.md

    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

    wip.md
    shunkeen
    shunkeen 2022/05/08
    速習すぎて置いてきぼりになって公式サイト見に行くやつ/ブコメの開発者について、大概の開発道具はUsers(利用者)よりもDevelopers(開発者)と表現する方が多数派だと思う。その道具を使って作る人が多い場合は特に
  • 「プロを目指す人のためのTypeScript入門」読書感想

    @uhyo さんのTSということで読んでいます。 一応入門書という位置づけなので、社内での育成に活用したい目線。 とはいえ自分でも学べるところ多そう、特にTSのd.tsみたいなモジュールまわり理解弱いので… 全体的な感想 4章(関数)、6章(高度な型)が特によかった。 (5章が入ってないのは自分がクラス使わないからなので、使う人だったら5章も入ってると思う) 自分も何年かフロントエンドエンジニアとしてやっているのでさすがにだいたいは知っている内容のおさらいになったけど、それでもふわっとした理解が適切に言語化だったり、コーナーケースの知らない挙動など発見は沢山あった。 特に育成には有用だなと思った。6章の内容は理論と実践の話のバランスが良く、レベル的にもそれなりにTS書いてる人でも知らないこと全然ありそうな内容だったので、自分のチームのメンバーにも少なくとも6章は読んでもらいたい。勧めます

    「プロを目指す人のためのTypeScript入門」読書感想
    shunkeen
    shunkeen 2022/05/06
    感想読んでたら面白そうすぎてポチった。実務ではまったくTypeScriptを書かないけど型の絞り込みが気持ち良すぎてつい触ってしまう
  • プロを目指す人のためのTypeScript 本の感想 #ブルーベリー本

    自分も教える事が多いので、読み手にどういう風に学んでほしいか、自分がどういう風に伝えるべきか、という視点で読んだ。 1章・イントロダクション そもそもTypeScript とはなにかみたいな話。 コンパイルエラーが出ている状態ではプログラムが完成したとは言えません。 力強い コンパイルエラーをただ避けるのではなく、利用する気持ち で TypeScript プログラミングに臨みましょう。 初心者に型違反の向き合い方を諭す話。IDEの補助になるとか。 TS年表で取り上げてるのが特徴的。exactOptionalProperty を取り上げてたり。 TSの型はランタイムに影響しない、という話を何度も解説している。これは初心者の誤解がとても多いので、必要だと思う。何度いっても、伝わって欲しい人に伝わらないのだが… enum や namespace については意図的に解説しない。過去のTS独自路線だ

    プロを目指す人のためのTypeScript 本の感想 #ブルーベリー本
    shunkeen
    shunkeen 2022/04/20
    パターンマッチの別世界線>“オブジェクト型リテラルとユニオンのコントロールフロー解析が他の言語と比べたときにTSが明らかに異質に発達してる部分なので、型システム詳しい人にこそ、その部分を楽しんでほしい”
  • HERP における Web フロントエンド開発概観 (2022年春編)

    はじめに# この記事は,HERP における Web フロントエンド開発の概観を,世間の開発者に——特に潜在的・顕在的な候補者の方に——知ってもらうことを目的として書かれた.HERP では現在 Web フロントエンドエンジニアを積極的に募集しているが,仮に入社したとしてどのような仕事をすることになるかのイメージが付いた方が,検討の候補に入れてもらいやすいのではないかという目論見による.また,採用している技術スタックにも珍しいものがあるため,単純に読み物として楽しめるかもしれない.なお,開発の実情について知ってもらうのが目的であり,実装の良し悪しについて議論することは目的としていない. HERP でのアプリケーション開発# B2B SaaS として,主に IT スタートアップ企業向けの,採用管理システムおよびタレントプールシステムを開発・提供している. そもそもプロダクトを通じて何を実現したい

    shunkeen
    shunkeen 2022/04/06
    ストリーム、状態機械、副作用、非同期、好き。>“Cycle.js は””stream (あるいは Observable) として知られる概念の取り扱いに指針を与え”、”副作用と非同期処理に関する””抽象化機構を提供している”
  • PrismaPromise とは何か

    はじめに Node.js の TypeScript-friendly な ORM である Prisma についての記事です。Prisma では PrismaPromise 型の値がよく使われており、それについて調べたことと、その設計が素晴らしい点をまとめています。 クエリの実行タイミング 次のような User モデルが定義されているとき、

    PrismaPromise とは何か
    shunkeen
    shunkeen 2021/12/31
    構築と実行を分離して、最適化を間に挟む感じ?>“transaction に対応したすべてのクライアントメソッド”、”は PrismaPromise を返しており、 .then が呼び出されるまで”、”クエリを実行せずに事前準備することができる”
  • TypeScriptを振り回せ!

    2021-12-17 Harajuku.ts Meetup #1

    TypeScriptを振り回せ!
    shunkeen
    shunkeen 2021/12/18
    “Q.能動的に型を活用するために必要なものは?”、”A.やる気と探究心と知識”/ど直球の回答になぜか笑ってしまった🤣 ある程度の仕様を表せて、仕様通りか検査してくれる人間のための型システムがある世界は極楽
  • Deno の話 @ Nikkei

    class: middle, center <img src="./assets/logo.svg" align="center" width="200" /> Deno の話 --- アジェンダ - Deno とは - Deno の各種特徴 - Deno Deploy の紹介 --- # 話す人 <img src="./assets/hinosawa.jpg" align="right" width="300" /> 日野澤歓也 twitter @kt3k - GREE (2012 - 2013) - Recruit (2015 - 2019) - Deno Land (2021 -) <small>2018年から Deno にコントリビュートを開始。2020年作者に誘われ Deno Land に転職。現在はフルタイムで DenoDeno Deploy を開発中。</small>

    Deno の話 @ Nikkei
    shunkeen
    shunkeen 2021/12/15
    "node".split("").sort().join("") が "deno" になるのオシャレすぎる
  • TypeScriptの型定義で麻雀の役判定をする 【dwango Advent Calendar 2日目】 - MANA-DOT

    このエントリは ドワンゴ Advent Calendar 2021 2日目の記事です(夜が明けるまでは2日目!)。 はじめに TypeScriptには Conditional Types や Template Literal Types といったクッソ強力な型機能があります。 これらを用いて、今回は 2p3p4p2m3m4m2s3s4s4s5s6s8s8s のような天鳳牌譜形式の文字列を型引数に渡すと、麻雀の役判定をする型(あくまで型です、関数ではありません)を作ってみようとおもいます。 (ただし時間がなかったため断么九と平和のみです)。 Conditional Types, Template Literal Types って何? それぞれ具体的にどんなものか、マニュアルの例を用いて示すと、以下のような感じです。 // Conditional Types の例 interface Anim

    TypeScriptの型定義で麻雀の役判定をする 【dwango Advent Calendar 2日目】 - MANA-DOT
    shunkeen
    shunkeen 2021/12/03
    “TypeScriptには Conditional Types や Template Literal Types といったクッソ強力な型機能があります”/クッソ強力なことがこれでもかとわかるし面白い
  • TypeScriptを効率的に独習しよう! 無料で学べる「TypeScript Deep Dive」日本語版の翻訳者が学習法を解説

    TypeScriptは近年JavaScriptに代わってWebフロントエンド開発で利用されているプログラミング言語です。TypeScriptは開発生産性および開発者体験に優れていることから、開発現場で広く採用されています。TypeScriptを学ぶことは、今後のWebフロントエンド開発では、ほぼ必須といって良いでしょう。この記事ではTypeScriptを使うメリット、ならびに「TypeScript Deep Dive 日語版」を活用してTypeScriptを短期間で学習する方法を紹介します。 はじめに 筆者はSIer出身のITエンジニアです。ゲーム開発会社などを経由して現在は一般企業でエンジニアとして勤務しています。はじめてTypeScriptの重要さを知ったのは、2018年ごろに「TypeScript Deep Dive」を読んだときでした。そして、今後必ず多くの人に役立つと考え、オリ

    TypeScriptを効率的に独習しよう! 無料で学べる「TypeScript Deep Dive」日本語版の翻訳者が学習法を解説
    shunkeen
    shunkeen 2021/12/01
    “TypeScriptのもっとも重要な機能は「型」です”、”コードの意図がより明確になる”/JavaScriptエンジンのためじゃない。人間のための型、仕様としての型ですね!そして型検査という簡易自動証明が(略
  • 1