filter<string> 관련 질문
414
작성한 질문수 16
const predicate = ((i) : i is string => typeof i === "string");
const filtered1 = [1,'2',3].filter(predicate);
const filtered2 = [1,'2',3].filter<string>((i) => typeof i === "string")filtered1 에서 위의 코드가 되는 이유는 i is string 이라고 지정해줘서 value is string 인 타입가드가 성립하는건데
filtered2 에서 에러가 나는건 i 값에 대한 타입을 정확히 안정해줘서 i 타입에 따라 true or false를 판별해야 하기 때문에 (i : number | string) => boolean 이 뜨고 결국 value is string 이라는 형식 조건자와 일치하지 않아 에러가 뜨는걸로 이해했는데 혹시 맞나요..?
그리고 별도로 그럼 is 가 들어간 커스텀 타입가드는 해당 타입이 뭔지 제한해주는(?) 역할로 이해하고 있었는데 정확하게는 위의 코드로 예시로 들자면 i의 타입을 string으로 고정시켜주는게 맞나요?
답변 1
1
filtered2에서는 <string>을 직접 넣어주셨는데, <string>을 직접 넣는 경우는 무조건 리턴값이 value is string이라는 타입가드이어야 합니다.
filter<S extends T>(predicate: (value: T, index: number, array: T[]) => value is S, thisArg?: any): S[];
filter(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): T[];
타입 가드는 i의 타입이 아니라 filtered2의 타입을 정해주는 겁니다.
데코레이터가 현재도 자주 쓰이는 문법인가요?
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





