작성
·
251
0
function test<T extends object>(params:T){ params.hi()}
위 코드에서 params.hi()는 타입을 보장할수 없다는 에러가 반환됩니다. 여기서 궁금한게 test<T extends object>를 해주었는데 왜 타입보장이 안된다구 하는지 모르겠습니다. 물론 hi의 타입을 몰른다 라구 하더라도 object 프로퍼티에 접근할때 dot으로 접근할수있는데 왜 타입 보장이 안된다고 하는걸까요??
왜 따로 interface IHi를 만들어서 그거를 extends해줘야 하는것일까요?? 물론 IHi하면 타입을 좀더 촘촘하게 설정해주어서 params안에는 hi라는 메소드가 들어간다는걸 인지시켜줄순 있겠지만 그래도 오브젝트가 사용될수 없는 이유는 모르겠습니다.
답변 1
0
질문주셔서 감사합니다 :)
object는 객체일 뿐 어떠한 프로퍼티, 메서드도 보장하지 않습니다.
interface ITest {
hello: any
}
test<ITest extends object>
예를 들어서 위와같이 타입을 적으면 hi가 없다는 것을 알 수 있습니다.
이는 협업에서도 마찬가지입니다.
작성자 분께서만 알고 있을 뿐, 같이 일하는 동료가 test<T extends object>를 보면서 test.hi( )를 유추할 수는 없습니다.
제가 클래스로 대입해서 설명을 하자면,
class ObjectTest {}
class Test extends ObjectTest {}
const test = new Test();
test.hi();
예를 들자면 위와 같은 상황인데 hi()가 있는 인터페이스를 상속해야만 100% 보장된다는 것을 아셔야합니다.
타입스크립트 엔진 자체가 100% 보장되는 것을 추구한다고 생각하면 편합니다.
뒤에서 배우시겠지만 타입가드를 통해서 100% 타입을 보장해서 써야만 오류가 안납니다.