밑의 댓글 보고 질문드립니다.
505
작성한 질문수 49
이 글 보고 질문드립니다.
interface myArray<T> {
myForEach(callback: (v: T) => void): void;
}
const a: myArray<number> = [1, 2, 3] as myArray<number>; // 에러 발생
a.myForEach((v) => console.log(v));
이렇게만 작성할 경우, Property 'myForEach' is missing in type 'number[]' but required in type 'myArray<number>' 에러가 발생합니다.
a의 타입을 myArray<number>로 지정했음에도 Array<number>를 참고하는 이유가 뭔가요?
Array<number>를 참고하기 때문에 밑의 댓글에
interface myArray<T> extends Array<T>로 적으셨던 건가요?강의에서 forEach 메서드가 에러가 안났던 이유는 Array<T>에 이미 forEach 메서드가 있었기 때문인가요?
답변 1
1
const a의 타입이 myArray<number>이지 [1, 2, 3]이 myArray<number>가 아니라서 그렇습니다.
myArray extends Array를 하면 Array가 myArray의 부분집합이 되므로 as로 전환이 가능해집니다.
forEach가 있는 경우는 myArray가 Array의 부분집합이 되므로 as로 전환이 가능해집니다.
0
자바스크립트의 extends와 다른건가요?
myArray > Array라는 말씀이시죠?
extends를 안 썼는데 Arr와 Array 관계를 어떻게 알 수 있나요? tsc가 암묵적으로 관계를 만드나요?
1
타입스크립트의 인터페이스인지라 extends는 js와 비교가 좀 어려울 것 같습니다.
{ forEach } 는 { forEach, fill, map, every, ...} (배열)의 부분집합입니다.
0
답변 감사합니다.
3에 대해 마지막으로 추가 질문드립니다.
interface myArray<T> {
forEach(callback: (v: T) => void): void;
}
const a: myArray<number> = [1, 2, 3];
a.forEach((v) => console.log(v));위와 같이 작성하면 에러가 안나는데,
아래와 같이 작성하면 에러가 납니다.
interface myArray<T> extends Array<T>{
forEach(callback: (v: T) => void): void;
}
const a: myArray<number> = [1, 2, 3];
a.forEach((v) => console.log(v));
첫 번째 경우는 Array를 생략한 거고, 두 번째 경우는 Array를 적어준 건데 에러가 나는 이유가 궁금합니다.
에러의 내용은 아래와 같습니다.
Interface 'myArray<T>' incorrectly extends interface 'T[]'.
Types of property 'forEach' are incompatible.
Type '(callback: (v: T) => void) => void' is not assignable to type '(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any) => void'.
Types of parameters 'callback' and 'callbackfn' are incompatible.ts(2430)
데코레이터가 현재도 자주 쓰이는 문법인가요?
0
81
2
유틸리티 타입 실제로 구현은 못해도 하나씩 외우면 실무할 때 지장 없겠죠?
0
66
1
매핑 타입은 type에서밖에 안된다고 하네요?
0
65
2
자바에서의 오버로딩과 같은 개념이라고 생각해도 되나요?
0
69
2
filter 함수 반환 타입 네로잉 질문
0
74
2
map<U>(callbackfn: ....) 할때 U는 왜 여기 있는거에요??
0
47
2
ts 컴파일을 위한 type 라벨링 부분
0
46
1
concat 함수 타입 구현 중 질문 있습니다!
0
100
2
filter 메소드 질문
0
53
1
forEach 제네릭 관련 문의
0
60
1
타입 추론 시 가장 넓은 범위로 추론이 되는 건가요?
0
165
1
enum이 javascript로 트랜스파일링될때 사라진다하셨는데요
0
207
1
함수 파라미터 타입 정의 시 ...args: any[]와 ...args: any 의 차이
0
223
1
Flat type에서 ReadonlyArray 타입을 사용하는 이유?
0
157
1
bind type 질문
1
149
1
Lowercase type 관련 질문
0
152
1
key-value 타입 자동추론 질문드립니다
0
266
1
타입스크립트 교과서, p131
0
266
1
타입스크립트 교과서 p122 forEach 메서드 질문
0
232
1
타입스크립트 교과서 p116 , 코드에러남
1
269
1
타입스크립트 교과서 p112 , 코드가 안읽힙니다..
0
266
1
타입스크립트 교과서 p83
1
184
1
타입스크립트교과서 p39 쪽 코드가 이해가 안되요
1
227
1
class 에서 ts의 private vs js의 private field( # )
0
339
1





