제네릭 extends관련질문 있습니다.
366
작성한 질문수 13
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% 타입을 보장해서 써야만 오류가 안납니다.
74. 데이터 캐시 - 1 (이론) 강의 영상 누락
0
25
1
타입 주석
0
48
1
BuilderInit 사용 이유
0
409
1
ts-node extends시 에러가 발생합니다 ㅠㅠ
0
836
1
데코레이터-2 강의 질문이 있습니다.
0
284
1
enum 질문이 있습니다.
0
330
1
색션 2, 데코레이터 개념이 아예 이해가 안됩니다.
0
539
1
변수의 타입에 클래스를 지정해준 것과 지정 안한 것 과의 차이가 어떻게 되는지 궁금해서 질문을 남깁니다.
0
369
2
섹션4 예제0 질문입니다.
0
719
2
안녕하세요 정말 좋은 강의 감사합니다
0
381
1
하나의 인터페이스와 여러 버전의 클래스에 관한 질문
0
413
1
!과 타입 단언 (보충) 질문
0
403
1
화살표 함수에서 this
0
434
1
constructor질문
0
262
1
타입 단언과 관련해서 질문드립니다.
0
651
1
extends와 implements질문 드립니다.
0
302
1
질문 드립니다.
0
375
2
as와 변수의 타입 지정 차이
0
353
1
undefined형식 에러
0
398
1
질문드립니다.
0
264
1
리터럴 타입 질문드립니다.
0
333
1
변수들이 var로 변합니다.
0
528
1
코딩 초보
0
462
1
service계층과 데이터베이스 요청 주고받을 때 Builder패턴 질문
0
1759
1





