inflearn logo
강의

講義

知識共有

[リニューアル] TypeScriptオールインワン:Part2. 実践分析編

jQuery型を直接作成する

jQuery를 $로 한 번 더 감싼 형태

58

oklshop555

投稿した質問数 4

0

안녕하세요, 제로초님! 좋은 강의 잘 듣고있습니다.

아래 $(tag)의 타입 추론 과정에 대해 질문드립니다.

// tag: JQuery<HTMLElement>
const tag = $("ul li")
  .addClass("hello")
  .addClass(function (index) {
    return "item-" + index;
  });

//* jQuery를 $로 한번더 감싼 형태
$(tag).html(function (i: number) {
  console.log(this);
  return 

JQuery와 $의 타입 정의는 다음과 같습니다.

// JQuery
interface JQuery<TElement = HTMLElement> extends Iterable<TElement> {...}
// $
<T extends Element>(element_elementArray: T | ArrayLike<T>): JQuery<T>;

즉, $(tag)의 tag는 JQuery<HTMLElement>이면서 element_element에 대응하므로 Element | ArrayLike<Element>이기도 합니다. 즉 JQuery<HTMLElement>Element | ArrayLike<Element>가 되기에 충분하다는 것을 추론할 수 있습니다.

JQuery<HTMLElement> extends Iterable<HTMLElement> 이므로 Iterable<HTMLElement> Element | ArrayLike<Element> 가 되기에 충분하다는 건데, 이 근거를 찾기 위해 Iterable의 타입도 찾아본 결과 다음과 같았습니다.

interface Iterable<T> {}

Iterable<HTMLElement>non-nullish라는 것입니다.

하지만 이게 Element | ArrayLike<Element> 가 되기에 왜 충분한 것인지를 모르겠습니다. lib.dom.d.ts에 정의된 Element 타입은 다음과 같이 매우 복잡하여 더 들여다 보진 못했습니다.

interface Element extends Node, ARIAMixin, Animatable, ChildNode, NonDocumentTypeChildNode, ParentNode, Slottable {


typescript

回答 1

1

zerocho

$에 해당하는 타입은

<T>(selection: JQuery<T>): JQuery<T>;

이겁니다. 그래서 그냥 JQuery가 $(tag)처럼 들어갈 수 있는 것입니다.

0

oklshop555

아 아랫줄에 저렇게 함수 오버로드가 되어 있었군요 ㅠㅠ

제가 미처 못봤네요 감사합니다~

타입 오버라이딩

0

78

2

React19에서 useRef 타입 정의의 변화

0

128

2

typescript interface를 jsdoc으로 주석달 때

0

234

2

declare module시 import 위치

0

198

2

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

0

147

2

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

0

236

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

405

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

382

2

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

0

409

1

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

0

441

1

axios 파트 첫번째 강의 질문입니다

0

537

1