TypeScriptの型の階層
値の型の序列の例
https://gyazo.com/7378d84f8e5bbd7a2be5534979dd902b
上がスーパータイプ、下がサブタイプ
上の方が広い、下のほうが狭い
Lang $ \sub string
例
code:ts
unknown
42|"hoge"
"hoge"
type Lang = "Haskell" | "TypeScript" | "Idris" // string union
type Hs = "Haskell" // string literal
never
https://user-images.githubusercontent.com/225809/72136115-eae2ae00-333c-11ea-8310-ae0f31e6b41d.png https://gist.github.com/laughinghan/31e02b3f3b79a4b1d58138beff1a2a89
https://gyazo.com/9480d8e09f5437e8c11b942ffeb46d8d
https://gyazo.com/fea35b4e62490c41d4ad9a0d07bd1ad7
'Hoge'や、42は、1集合であることに注意
42集合には、「42」という値が入る
neverは空集合
何の値も入らない
anyとunknownの差
anyは
どんな型からも代入可能
どんな型にも代入可能
code:ts
let an: any;
an = null; // ok
an = true; // ok
an = {}; // ok
let aaa: string = an; // ok
unknownは
どんな型からも代入可能
どんな型にも代入不可
anyには代入できる
code:ts
let un: unknown;
un = null; // ok
un = true; // ok
un = {}; // ok
let unn: string = un; // error
let auu: any = un; // ok
unkwnonはそのまま使用できない