inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[리뉴얼] 타입스크립트 올인원 : Part2. 실전 분석편

함수 컴포넌트(FC vs VFC), Props 타이핑

FunctionComponent 인터페이스 관련 질문입니다

410

이종민

작성한 질문수 61

0

interface FunctionComponent<P = {}> {

    (props: P, context?: any): ReactElement<any, any> | null;

    // 함수의 추가속성

    propTypes?: WeakValidationMap<P> | undefined;

    contextTypes?: ValidationMap<any> | undefined;

    defaultProps?: Partial<P> | undefined;

    displayName?: string | undefined;

}

이 부분에서 첫 번째 줄을 함수형 컴포넌트의 모습을 타이핑한 것으로 배웠는데 아래 속성같은 경우는 함수형 컴포넌트 자체의 속성(프로퍼티)을 타이핑한 것 같다고 유추를 할 수 있었습니다.

그런데 타입스크립트가 interface만 보고도 자동으로 함수의 시그니처와 함수 자체의 프로퍼티를 따로 분리해서 추론을 해주는 건가요?

이부분의 작동 원리가 궁금합니다.

예를 들면

const WordRelay:FunctionComponent = () => { 
   return jsx코드
}

이 부분에서 FunctionComponent로 타이핑하였을 때, WordRelay를 왜 타입 부분의 첫 번째로 타이핑한 건지, 아래의 propsTypes, contextTypes 등의 속성으로는 추론하지 않은 이유가 타입스크립트 내부 동작방식에 의해서인지가 궁금합니다.

 

추가적으로 이 방법이 인터페이스를 사용하여 좀 더 복잡한 함수를 타이핑할 수 있는 방법이라고 생각해도 될까요? (보통 함수에 프로퍼티를 추가할 일이 없어서 이런 타이핑 방식을 보니 헷갈리네요ㅠㅠ)

typescript

답변 1

0

제로초(조현영)

contextType이나 propType으로 추론하지 않은 이유는 뒤에 실제 값이 함수가 대입되었기 때문입니다. 실제 값을 기반으로 타입 추론을 합니다.

인터페이스에 함수 타입을 선언하는 건 말씀하신대로 함수에 다른 속성까지 달아둘 수 있어서 그렇습니다. WordRelay.displayName같은 것도 가능하니까요.

0

이종민

아 덕분에 이해되었습니다! 감사합니다!

타입 오버라이딩

0

78

2

React19에서 useRef 타입 정의의 변화

0

128

2

jQuery를 $로 한 번 더 감싼 형태

0

58

1

typescript interface를 jsdoc으로 주석달 때

0

234

2

declare module시 import 위치

0

198

2

declare global 로 선언된 타입을 확장하는게 아닌 좁히는것도 가능할가요?

0

148

2

typescript 강의를 보고 개발을 하다가 강의와 다른 내용인데 물어볼곳이 여기밖에 없어서 질문 드립니다.

0

237

1

강의에 필요한 사전준비와 예제 코드 첨부

1

311

1

local.ts 예제코드 첨부 합니다.

1

230

1

redux 예제코드 가져와서 강의 보면서 따라하는데

1

248

1

react 함수 컴포넌트 타이핑은 있는데 클래스 컴포넌트 타이핑 예제 코드가 없네요.

1

287

1

axios 1.6.0 버전으로 보고 있는데영

4

393

1

Module '"axios"' has no default export 에러 나시는분들

0

881

1

안녕하세요, 제로초님 타입스크립트 axios 분석 강의보고 궁금한점이 있어서 질문드립니다

1

389

1

안녕하세요. 제로초님 당신의 강의 매니아 입니다. typescript 모듈 관련 질문이 있어서요.

0

269

1

axios catch 에서 error 타입에 대해 as 없이 이렇게 사용하면 어떨까요?

0

406

1

global 선언 시 export {}

0

298

1

initialState가 제네릭 S인 이유가 잘 이해가 되지 않습니다.

0

310

1

declare module vs declare namespace

0

478

1

declare namespace vs namespace

0

500

2

"axios": "1.4.0" 버전 axios type 코드가 강의와 다릅니다!

0

561

1

Redux type 설정 과정에서 발생한 오류 질문 (ts[2345])

1

383

2

index.d.ts 에서 global declare 선언을 했을 때와 하지 않았을 때의 차이

0

409

1

미들웨어가 커링패턴으로 이루어진 이유

0

442

1