TypeScript サブタイプについて
A <: B は、AはBのサブタイプである、と言う意味である。
この場合、Bを期待するところでAを使うことができる。
以下の例であてはめると、TreeNodeがBでLeafNodeがAになる。
type TreeNode = {
value: string
}
type LeafNode = TreeNode & {
isLeaf: true
}
const a: LeafNode = {value: 'a', isLeaf: true}
const b: TreeNode = a //OK
const c: TreeNode = {value: 'c', isLeaf: true} //Type '{ value: string; isLeaf: boolean; }' is not assignable to type 'TreeNode'.
LeafNode <: TreeNode なので、TreeNodeを期待するところでLeafNodeが使える。
そのため、変数bへの割り当てはOKになる。
ただし、変数cの割り当てに関しては、おそらく {value: string, isLeaf: tree} というリテラルをTreeNodeに割り当てると解釈されるためNGとなる。
ディスカッション
ピンバック & トラックバック一覧
[…] 武骨日記 【よし!徹底的にやる!】TypeScriptのsubtype vs supertypeの違い | 武骨日記 【よし!徹底的にやる!】TypeScriptのsubtype vs supertypeの違い たみブログ TypeScript サブタイプについて | たみブログ A <: B は、AはB… […]