반응형
제네릭을 사용하는 Typescript 화살표 함수의 구문은 무엇입니까?
타이프 스크립트 핸드북에는 현재 화살표 기능에 대한 내용이 없습니다. 일반 함수는 다음과 같은 구문으로 일반적으로 입력 할 수 있습니다.
function identity<T>(arg: T): T {
return arg;
}
화살표 함수의 구문은 무엇입니까?
Robin이 참조 하는 구문을 설명하는 전체 예제는 ...
일반 기능
다음과 같은 것이 잘 작동합니다.
function foo<T>(x: T): T { return x; }
그러나 화살표 일반 함수를 사용하면 다음을 수행 할 수 없습니다.
const foo = <T>(x: T) => x; // ERROR : unclosed `T` tag
해결 방법 : 일반 매개 변수에 extends를 사용하여 컴파일러가 일반임을 암시합니다. 예 :
const foo = <T extends unknown>(x: T) => x;
위의 예가 혼란 스러웠습니다. 저는 React와 JSX를 사용하고 있으므로 시나리오가 복잡하다고 생각합니다.
TypeScript Deep Dive 에서 설명을 얻었습니다 .
해결 방법 : 제네릭 매개 변수에 extends를 사용하여 컴파일러에게 제네릭임을 암시합니다. 이것은 저를 도왔던 더 간단한 예제에서 나왔습니다.
const identity = < T extends {} >(arg: T): T => { return arg; }
언어 사양은 p.64f에 나와 있습니다.
<T> (...) => {...} 형식의 구문은 유형 매개 변수가있는 화살표 함수 표현식 또는 유형 매개 변수가없는 화살표 함수에 적용된 유형 어설 션으로 구문 분석 될 수 있습니다. 전자 [..]로 해결
예:
// helper function needed because Backbone-couchdb's sync does not return a jqxhr
let fetched = <
R extends Backbone.Collection<any> >(c:R) => {
return new Promise(function (fulfill, reject) {
c.fetch({reset: true, success: fulfill, error: reject})
});
};
.tsx
파일 에 있다면 그냥 쓸 수 <T>
는 없지만 작동합니다.
const foo = <T, >(x: T) => x;
받는 반대로 extends {}
해킹, 적어도이 해킹 의도를 유지합니다.
이것은 나를 위해 작동합니다
const Generic = <T> (value: T) => {
return value;
}
extends {}
작품에 대한 대중적인 대답 은보다 낫지 extends any
만은 T
객체가되도록 강요 합니다.
const foo = <T extends {}>(x: T) => x;
이를 방지하고 형식 안전성을 유지하려면 extends unknown
대신 사용할 수 있습니다.
const foo = <T extends unknown>(x: T) => x;
반응형
'Programming' 카테고리의 다른 글
클라우드, 그리드 및 클러스터의 차이점은 무엇입니까? (0) | 2020.08.07 |
---|---|
Javascript / HTML5에서 Excel 파일을 구문 분석하는 방법 (0) | 2020.08.07 |
Google지도에 선 / 경로 그리기 (0) | 2020.08.07 |
Django에서 개수 주석에 대한 개체를 필터링하는 방법은 무엇입니까? (0) | 2020.08.07 |
값이 JQuery로 선택 목록에 있는지 확인하십시오. (0) | 2020.08.07 |