### マップ型
stringのキーのマップ型
type stringArray = { [key in string]: string } const data1:stringArray = { 'start': 'start', 'middle': 'middle', 'end': 'end' } data1['finish'] = '**end**' data1[100] = 'ok' console.log(data1)
enum
enum human {name='name', mail='mail'} type HumanMap = { [key in human]: string } const taro:HumanMap = { name: 'taro', mail: 'taro@yamada' } console.log(taro) const hana:HumanMap = { name: 'hanako', mail: 'hanak@gmail.com' } console.log(hana)
ユニオン型
class Student { name:string school:string grade:number constructor(nm:string, sc:string, gr:number){ this.name = nm this.school = sc this.grade = gr } print():void{ console.log('<< ' + this.name + ',' + this.school + ':' + this.grade + ' >>') } } class Employee { name: string title: string department:string constructor(nm:string, tt:string, dp:string){ this.name = nm this.title = tt this.department =dp } print():void { console.log(this.name + '[' + this.title + ',' + this.department + ']') } } type People = Student | Employee const taro:People = new Student('taro', 'high school', 3) const hana:People = new Employee('hanako', 'president', 'sales') const sachi:People = new Student('schiko', 'jinir-high school', 1) const jiro:People = new Employee('jiro', 'director', 'labo') const data:People[] = [taro, hana, sachi, jiro] for(let item of data){ item.print() }
ユニオン型を個別に処理
class Human { data: People[] = [] add(item:People):void { this.data.push(item) } print():void { for(let item of this.data){ let ob switch(item.constructor.name){ case 'Student': ob = item as Student console.log(ob.name + ', ' + ob.school + '(' + ob.grade + ')') break case 'Employee': ob = item as Employee console.log(ob.name + ':' + ob.title + ':' + ob.department) break default: console.log('cannot print.') } } } }
### テンプレートリテラル
${}で埋め込む
const data = [10, 20, 30] const msg = `data is [${data}]` console.log(msg) const result = `total is ${data[0]+data[1]+data[2]} !` console.log(result)
### テンプレートリテラル型
type val_name = "sample"|"private"|"public" type data_type = `${val_name}_data` type prop_type = `${val_name}_property` type method_type = `${val_name}_method` const s:data_type = "sample_data" const t:prop_type = "public_property" const u:method_type = "private_method" const v:data_type = "personal_data"
### レコード型
type prop_name = 'name' | 'mail' | 'age' type Person = Record<prop_name, string|number> const taro:Person = { name: 'taro', mail:'taro@gmail.com', age: 39 } console.log(taro)
### Pick型
type person_data = { name:string, mail:string, address:string, age:number } type person_keys = 'name' | 'age' type human_keys = 'name' | 'mail' | 'address' type person = Pick<person_data, person_keys> type human = Pick<person_data, human_keys> const taro:person = { name: 'taro', age: 39 } const hana:human = { name: 'hanako', mail: 'hanako@gmail.com', address: 'chiba' } console.log(taro) console.log(hana)
### イテレータ
class MyData<T> { data:T[ ] = [] constructor(...data: T[]){ this.data = data } add(val:T) { this.data.push(val) } [Symbol.iterator](){ let pos = 0; let items = this.data; return { next(): IteratorResult<T>{ if(pos < items.length) { return { done: false, value: items[pos++] } } else { return { done: true, value: null } } } } } } const data = new MyData<string>('one','two','three') for(let item of data){ console.log(item) }
OKなのかNGなのかすらわからん