Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- intellij
- 계산맞추기 게임
- intllij 내 Bean을 찾지 못해서 발생하는 오류
- Concurrently
- Do it 자바스크립트 + 제이쿼리 입문
- Python
- 인프런
- node.js로 로그인하기
- JS 개념
- spring-boot
- 자바스크립트
- 따라하며 배우는 노드 리액트 기본 강의
- You are importing createRoot from "react-dom" which is not supported. You should instead import it from "react-dom/client"
- props
- react
- ReactDOM.render is no longer supported in React 18. Use createRoot instead
- DB Browser
- 모던자바스크립트
- node.js 설치
- vs code 내 node
- 웹 게임을 만들며 배우는 리액트
- Colaboratory 글자 깨짐
- 리액트
- googleColaboratory
- 타자 게임 만들기
- Spring-Framework
- react오류
- 거북이 대포 게임
- 모두의 파이썬
- 노드에 리액트 추가하기
Archives
- Today
- Total
프로그래밍 삽질 중
[TS] bind 본문
출처 : https://github.com/ZeroCho/ts-all-in-one
출처 : https://github.com/microsoft/TypeScript/blob/main/lib/lib.es5.d.ts
* [lib.ex5.d.ts] bind & ThisParameterType, OmitThisParameter
//bind
bind<T>(this: T, thisArg: ThisParameterType<T>): OmitThisParameter<T>;
bind<T, A0, A extends any[], R>(this: (this: T, arg0: A0, ...args: A) => R, thisArg: T, arg0: A0): (...args: A) => R;
bind<T, A0, A1, A extends any[], R>(this: (this: T, arg0: A0, arg1: A1, ...args: A) => R, thisArg: T, arg0: A0, arg1: A1): (...args: A) => R;
bind<T, A0, A1, A2, A extends any[], R>(this: (this: T, arg0: A0, arg1: A1, arg2: A2, ...args: A) => R, thisArg: T, arg0: A0, arg1: A1, arg2: A2): (...args: A) => R;
bind<T, A0, A1, A2, A3, A extends any[], R>(this: (this: T, arg0: A0, arg1: A1, arg2: A2, arg3: A3, ...args: A) => R, thisArg: T, arg0: A0, arg1: A1, arg2: A2, arg3: A3): (...args: A) => R;
bind<T, AX, R>(this: (this: T, ...args: AX[]) => R, thisArg: T, ...args: AX[]): (...args: AX[]) => R;
//ThisParameterType & OmitThisParameter
type ThisParameterType<T> = T extends (this: infer U, ...args: never) => any ? U : unknown;
type OmitThisParameter<T> = unknown extends ThisParameterType<T> ? T : T extends (...args:
//OmitThisParameter : 타입추론이 실패했을 때 그 함수 그대로 가져옴, 타입추론 성공 시 매개변수와 리턴값 그대로 함수로 만듦(this가 사라짐)
* 예제(ThisParameterType, OmitThisParameter)
function a(this: Window | typeof obj, param: string) {
console.log(this)
}
const obj = {name: "zerocho"}
const b = a.bind(obj)
b(); //zerocho
//(this를 추출) type T = Window | typeof obj
type T = ThisParameterType<typeof a>
//(this를 없앰) type NoThis = (param: string) => void
type NoThis = OmitThisParameter<typeof a>
* bind
▶ 1. this를 쓰는 경우
▶ 2. this를 쓰지 않는 경우
* 예제 : bind(this를 쓰는 경우)
const zerocho = {
name: "zerocho",
sayHello(this: {name: string}) {
console.log(`hi, ${this.name}`);
}
}
//sayHello는 this가 있으나 sayHi는 this가 없음(bind의 ThisParameterType, OmitThisParameter 때문)
const sayHello = zerocho.sayHello;
//sayHi의 this는 name: 'nero'
const sayHi = zerocho.sayHello.bind({name: "nero"});
sayHi(); //bind 통해서 this가 zerocho에서 nero로 바뀜
* 예제 : bind(this를 쓰지 않는 경우)
function add(a: number, b: number, c: number, d: number, e: number, f: number) {
return a + b + c + d + e + f;
}
const add1 = add.bind(null);
add(1, 2, 3, 4, 5, 6);
const add2 = add.bind(null, 1); //매개변수 자리에 미리 값을 갖다 놓음
add2(2, 3, 4, 5, 6);
const add3 = add.bind(null, 1, 2);
add3(3, 4, 5, 6);
const add4 = add.bind(null, 1, 2, 3);
add4(4, 5, 6);
const add5 = add.bind(null, 1, 2, 3, 4);
add5(5, 6);
//bind<T, A0, A extends any[], R>(this: (this: T, arg0: A0, ...args: A) => R, thisArg: T, arg0: A0): (...args: A) => R;
// const add2 = add.bind(null, 1);
// add2(2, 3, 4, 5, 6);
//매개변수 : (this: (this: T, arg0: A0, ...args: A) => R, thisArg: T, arg0: A0)
//함수의 리턴값 : (...args: A) => R
//this는 함수
//thisArg: T = null
//arg0: A0 = 1
//...args: A = 2, 3, 4, 5, 6
'과거 프로그래밍 자료들 > Javascript&typescript' 카테고리의 다른 글
[TS] Axios 타입 분석(get, post, error) (1) | 2022.09.21 |
---|---|
[TS] flat (1) | 2022.09.20 |
[TS] Promise, Awaited (1) | 2022.09.20 |
[TS] (utility types) infer 타입 분석 (0) | 2022.09.20 |
[TS] (utility types)Required, Record, NonNullable 타입 분석 (0) | 2022.09.18 |