Slide 35
Slide 35 text
WIT → TS TYPE MAPPING ④ — USER-DEFINED
record / variant / enum / flags
命名は kebab-case → camelCase に自動変換。variant
は switch (x.tag)
で網
羅性検査が効く、flags
は全て optionalなので !flags.admin
判定は要注意。
WIT 型 TS 型 備考
record { f-name: T
}
{ fName: T }
kebab → camel
自動変換
enum { a, b, c } 'a' | 'b' | 'c'
string literal
union
variant { x(T), y,
... }
{ tag, val? }
の union
判別共用体
flags { a, b, c } { a?, b?, c? }
全 field が
optional
guest.d.ts (jco transpile)
// record { user-id: u32, full-name: string }
type UserProfile = { userId: number; fullName: string }; // camelC
// variant { ok(string), pending, fail(error-kind) }
type Status =
| { tag: 'ok', val: string }
| { tag: 'pending' }
| { tag: 'fail', val: ErrorKind };
// flags { read, write, admin } — 全部 optional
type Permissions = { read?: boolean; write?: boolean; admin?: bo
永野 峻輔 / @glassmonkey / #tskaigi_leverages 35 / 46