アップキャスト
基本的に安全なはず
例
record型に対するupcastingは安全
常に安全なのかは知らないmrsekut.icon
code:ts
// T <: S
type S = { a: string };
type T = { a: string; b: number };
const a: T = { a: 'a', b: 2 };
const b = a as S;
b.a
この時、bはb.aにしかアクセスできなくなるだけなので安全
例
code:ts
type Animal = Cat | Dog;
type Cat = 'cat';
type Dog = 'dog';
const a: Cat = 'cat';
const b = a as Animal // upcasting
部分であるCatを、Animalにcastしている
この時、bを静的にはDogとしても扱えることになるが、runtimeとズレることになる
これは一見危険にも見えるが、CatとDogで処理を分ける必要がある場合は、判定を強制されるので安全
code:ts
const f = (c: Cat) => {}
f(b); // error
if (isCat(b)) {
f(b); // ok
}