[동호] @ts-expect-error
라는 것이 또 있더라구요.
@ts-ignore
는 코드에 에러가 있든 없든 그 다음 코드의 에러를 무시합니다.@ts-expect-error
는 코드에 에러가 있으면 무시하고, 없으면 주석에 에러를 표시합니다.[동호] noImplicitAny
관련 설명도 있었지 않나요?
[효리] noImplicitAny
가 true
일 때, 타입 진화가 된다고 합니다.
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
인터페이스의 bar
가 string
타입이잖아요. 이중 단언문으로 as
가 중첩이 되어 있어서 (as
를 하나 떼는게) 분리한다는 말인 것 같고, unknown
은 unknown
과 any
타입에만 할당이 가능하니까 Bar
에 할당할 수 없다는 뜻 아닐까요?
[재희] 책에 보니까 “기능적으로는 동일하지만, 추후에 두 단언문을 분리해야할 때 unknown
이 더 안전하다”고 되어 있는데, 나중에 저 as
체인(이중 단언문)이 베스트는 아니니까 as Bar
를 뗀다고 쳤을 때 any
보다 unknown
이 더 좋다는 것 같아요.
[동호] 제네릭 나오는 부분 한번 더 설명해주실 수 있나요? 책에서는 unknown
대신에 제네릭 매개변수를 사용하는 경우가 있다고 하는 부분이요.
[재희] 제네릭으로 any
처럼 쓸 거면 unknown
을 반환하는 게 낫다는 소리 같습니다.
[동호] 한 번만 더 말씀해주실래요?