TypeScript
https://gyazo.com/eda3310f52982edbcb1afd55a81cff5e
document
playground
JSR
libraries
ORM (object-relational mapper)
Prisma
型 level programming
fp-ts
primivite 型
number, string, boolean
特殊な型
any
noImplicitAny
null, undefined
strictNullChecks
void
unknown
never
literal 型
type T = 'example';
`type T = 42;'
配列型
T[]
tuple 型
[T, U]
object 型
{ prop1: Value1; prop2: Value2; }
構造的
{ x: X; y: Y; }$ <:{ x: X; }
optional
{ prop1?: P1 }
index signature
{ [p1: string]: P1; }
{ [p1: number]: P1; }
型に名を附ける
interface
interface T { prop1: Value1; prop2: Value2; }
class に實裝させられもする interface T { } class A implements T { }
type alias
type T = U;
generics
T<S, U> = 〜
function f<T>() { }
()<T> => 〜
互換性は、構造內部の互換性に依って決まり、構造內部の互換性に等しい
union 型
T | U
number | string の樣に交差してゐないと narrowing してくれる
tagged union 型
code:ts
type T =
| { tag: "A"; a: unknown }
| { tag: "B"; b: unknown };
narrowing してくれる
交差型 (intersection 型)
T & U
列擧型 (enum 型)
enum T { T1, T2, } let v = T.T1;
enum T { T1 = 0, T2, }
enum T { T1 = 0, T2 = 1 << 0, T3 = 1 << 1, T4 = 1 << 2, }
enum T { T1 = 'T1', T2 = 'T2', }
const enum T = { T1, T2, }
函數型
function f(p1: P1): R { }
function f(p1: P1): R1; function f(p2: P2): R2 { }
overload したらば、本體を持つ宣言は呼び出せない
(p1: P1): V => v
{ (p1: P1): R1; (p2: P2): R2; }
戾り値に就いて共變 (covariant)
引數に就いて共變且つ反變 (bivariant)
引數の個數
少ないのは許容されない
optional 引數
function f(p1?: P1): R { }
function f(p1: P1 = 'example'): R { }
可變長引數
function(...p1: P1[]): R { }
引數が多いのは許容される
newable
{ new(p1: P1): R }
條件
〜 ? T : U
型 guard
typeof 演算子
instanceof 演算子
制禦 flow に依存した narrowing
keyof 演算子
object 型から union 型を取り出す
readonly 演算子
Readonly<> 型
extends 演算子