Typescriptの勉強
Typescript勉強する
参考資料
todo
- ジェネリクスについて調べる
- Promiseについて調べる
- コールバックについて理解する
const f = (n:number, d:number): Promise<number> => {...}
戻り値にPromise<number>
が指定されている。→ <number>は総称型(ジェネリクス)→ 「numberの値が結果として渡されるPromiseが戻り値として返されるようになる」 → ちょっとわからん
return文の中身
return new Promise((f)=>{...})
「引数のfは、事後処理として実行される関数が値として渡されます。」
「この関数には、numberの値を引数として持つものが設定されます。なぜなら、Promise<number>というように、このPromiseではnumberの値が返されるように指定しているからです。」
f(10,100).then(cb)
「thenの引数に用意した処理は、非同期処理が完了したあとで実行されることになります。このことから、こうした処理を 「コールバック」 と呼びます。
type person = {readonly name:string, mail?:string, age?:number, print:()=>void}
- 引数や変数では、名前の後に?をつけえることでオプションを指定(=nullを許容)できる
- readonlyをnameに指定→値の読み取りのみ(書き込み禁止)になる
列挙型(enum)について
多数の値の中から一つを選ぶとき、たとえば三つの値だけしか選べない型が欲しくなる。これを実現するのが「enum」型
enum janken { goo, choki, paa }
const you = janken.goo
swith(you){
case janken.goo:
console.log("あいこ");
break
case janken.choki:
console.log("勝ち");
break
case janken.paa:
console.log("負け");
break
}
テキストで得られるenum
enum School {junior, juniorHigh, high, other}
このままconsole.logすると0,1,2,3という数字になる
しかし以下のように書くことで、指定されたテキストが値として使われるようになる。
enum School{
junior = "junior",
juniorHigh = "juniorHigh"
high = "high"
other = "other"
}
let grade = Shool.high
console.log(grade)
// "high"
クラスを拡張する仕組み
- インターフェイス
- 抽象クラス
- 静的メンバー
- パラメータプロパティ
- 総称型(ジェネリクス)の使用
- ユーティリティ型の利用
ジェネリクス(総称型)について
- 「any型のようにどのような値でも受け付けるが、受け付ける型に応じて、その内部や戻り値で使われる型が規定される」
クラスへのジェネリクス(総称型)の適用
class Data<T> {
data? :T[]
constructor(...item:T[]) {
this.data = item
}
print():void{
if (this.data){
for(let item of this.data){
console.log(item)
}
} else {
console.log("no data...")
}
}
}
const data1 = new Data<string>("one", "two", "three")
const data2 = new Data<number>(123,456,78,90)
data1.print()
data2.print()
ユーティリティ型について
ユーティリティ型とは
TypeScript comes with a large number of types that can help with some common type manipulation, usually referred to as utility types.[1]
ユーティリティ型の例
type data = [string, number]
type ReqData = Readonly<data> // Readonlyユーティリティ型の使用
const x:data = ["taro", 39]
const y:ReqData = ["hanako", 28]
x[1] = 28
y[1] = 17 // エラーになる
// Cannot assign to '1' because it is a read-only property.
クラスにおけるユーティリティ型の利用例
type Human = {
name:string
mail?:string
age?:number
}
class Person{
human: Required<Human> // Requiredユーティリティ型の使用 → mailやageの?(オプション指定)が無効になる
constructor(...){...}
}
ジェネリクスとユーティリティ型
- ユーティリティはジェネリクス(総称型)
- <>に型を指定することで、その型に性質を付与した新しい型が用意されるものと考えられる
代表的なユーティリティ型
-
Readonly<T>
:変更不可にする -
Required<T>
:必須項目(オプション不可)にする -
Partial<T>
:すべてオプションにする
ユニオン型について
「ユニオン型の値では、利用するすべてのクラスに共通するプロパティとメソッドが「ユニオン型の機能」として認識されるようになります。」→よくわからない。