아이템 38

[동호] @ts-expect-error라는 것이 또 있더라구요.

아이템 40

[동호] noImplicitAny 관련 설명도 있었지 않나요?

[효리] noImplicitAnytrue일 때, 타입 진화가 된다고 합니다.

아이템 42

interface Foo {
  foo: string
}
interface Bar {
  bar: string
}
declare const foo: Foo
let barAny = foo as any as Bar
let barUnk = foo as unknown as Bar

[효리] 두 개의 단언문을 분리할 때 unknown은 오류를 발생시키므로 unknown을 사용하자는데, 두 개의 단언문을 분리한다는 게 무슨 뜻일까요?

[태호] 제가 생각하기에, Bar 인터페이스의 barstring 타입이잖아요. 이중 단언문으로 as가 중첩이 되어 있어서 (as를 하나 떼는게) 분리한다는 말인 것 같고, unknownunknownany타입에만 할당이 가능하니까 Bar에 할당할 수 없다는 뜻 아닐까요?

[재희] 책에 보니까 “기능적으로는 동일하지만, 추후에 두 단언문을 분리해야할 때 unknown이 더 안전하다”고 되어 있는데, 나중에 저 as 체인(이중 단언문)이 베스트는 아니니까 as Bar를 뗀다고 쳤을 때 any보다 unknown이 더 좋다는 것 같아요.


[동호] 제네릭 나오는 부분 한번 더 설명해주실 수 있나요? 책에서는 unknown 대신에 제네릭 매개변수를 사용하는 경우가 있다고 하는 부분이요.

[재희] 제네릭으로 any처럼 쓸 거면 unknown을 반환하는 게 낫다는 소리 같습니다.

[동호] 한 번만 더 말씀해주실래요?