みなさんこんにちは!宮水です。
今日は、TypeScriptを完全に理解したいと思います。
基本の型
Boolean, Number, String, Array, Tuple, Enum, Any, Void,Null and Undefined, Objectなどの型がある。
Interfaces
例えば、以下のような関数を定義したとします。この関数はlabelを必須としていますが、myObjectはsizeというプロパティも持っているので型が合いません。
function printLabel(labelledObj: { label: string }) { console.log(labelledObj.label); } let myObj = {size: 10, label: "Size 10 Object"}; printLabel(myObj);
そこで使えるのかinterfaceです。
以下のように書き換えると、label以外の引数があっても大丈夫。しかも、label?: stringと書くと、任意の型になります。
interface LabelledValue { label: string; } function printLabel(labelledObj: LabelledValue) { console.log(labelledObj.label); } let myObj = {size: 10, label: "Size 10 Object"}; printLabel(myObj);
Type
interfaceと似て非なるTypeなるものが存在します。
TypeScriptのInterfaceとTypeの比較 - Qiita
Typeはinterfaceより少しお堅い型って感じかなと思ったんですけど、そもそも全く違うもので比較するものでもなさそうです。
上のQiitaの表がわかりやすかったので、どっちを使うべきか適宜判断して使おうと思います。
Classes
interface ClockInterface { currentTime: Date; } class Clock implements ClockInterface { currentTime: Date; constructor(h: number, m: number) { } }
Functions
以下のように、関数型も定義できます。
interface SearchFunc { (source: string, subString: string): boolean; }
Generics
ジェネリクスといって、以下のような書き方もあります。
ReactとTypeScriptを組みわせるときによく見かける書き方ですね。
function identity<T>(arg: T): T { return arg; }
終わりに
またわかったことがあったら追記します🙋♀️