TypeScriptとは #
- マイクロソフトによって開発されているオープンソースのプログラミング言語のこと.
- JavaScriptに, 静的型付け・クラスベースオブジェクト指向を加えた.
- GitHubリポジトリ: https://github.com/Microsoft/TypeScript
初めてのTypeScript #
solareenlo/Typescript-Practice/01_Getting_Started
インストール #
npm i --save-dev typescript
TypeScript + Node.js + Docker + Circle CI #
- TypeScript + Node.js プロジェクトのはじめかた2019
- TypeScriptでExpress.js開発するときにやることまとめ (docker/lint/format/tsのまま実行/autoreload)
- bitjson/typescript-starter
- microsoft/TypeScript-Node-Starter
objectのkeyにstringを設定したら, object[key]でエラーになった時の対処法 #
- tsconfigに
--suppressImplicitAnyIndexErrors
を付け加える. ブラケット記法でプロパティにアクセスした時にany
型を許容するのでとっても非推奨.
- 以下のように
key
はstring
型と明示する. 問題点はkey
が全てstring
型になること.なのでこうする. が,interface ISomeObject { firstKey: string; secondKey: string; [key: string]: string; // <-この行を追加! } const obj = { firstKey: "a", secondKey: "b", } as ISomeObject; const key: string = 'secondKey'; const secondValue: string = obj[key];
secondValue
の型がstring|boolean|number
型と複数の型になる.interface ISomeObject { firstKey: string; secondKey: number; thirdKey: boolean [key: string]: string|boolean|number; //<-or条件で型を指定 } const key: string = 'secondKey'; const secondValue = obj[key]; // secondValue => string|boolean|number型
keyof
を使う.ジェネリクスを使って、type safeにブラケット記法が使える関数を作ると以下の感じになる.interface ISomeObject { firstKey: string; secondKey: number; thirdKey: boolean; } const obj = { firstKey: "a", secondKey: 2, thirdKey: false } as ISomeObject; const key: keyof ISomeObject = 'secondKey'; // ここを変更 const secondValue = obj[key]; // secondValueがnumber型に!
const accessByBracket = <S, T extends keyof S>(obj: S, key: T) => { return obj[key]; }; const obj = { firstKey: "a", secondKey: 2, thirdKey: false } as ISomeObject; const value = accessByBracket(obj, 'secondKey'); // value => 2
Reference: Typescript ブラケット記法(Object[key])でno index signatureエラーをtype safeに解決したい。