key
의 값을 과 같은 속성으로 가질 수 있으므로 다음 getter 함수는 매우 유용하고 재사용 가능합니다. TypeScript에서 setter 함수를 정의하는 방법이 있습니까?
export function keyOf<a>(value: { key: a; }) : a {
return value.key;
}
마찬가지로 나는 보편적 인 setter 함수를 정의 할 수 있습니다
export function withKey<a>(value: { key: a; }, key: a) : void {
value.key = key;
}
유일한 문제는 대신 void
을 반환하는 내가 수정 key
속성을 원래 개체 value
를 반환 할 필요는 것이다. 이 같은 것은 :
export function withKey<b, a extends { key: b }>(value: a, key: b) : a {
value.key = key;
return value;
}
그러나 이것은 유효한 TypeScript 코드가 아닙니다.
질문 : 어떻게 그 속성이 설정된 원래 개체를 반환하는 typesafe 범용 setter 함수를 얻을 수 있습니까?
는 UPDATE : 유형 매개 변수의 현재 타이프 라이터 종속성에서
는 금지되어 있습니다. 나는 그것이 타입 시스템을 더 간단하고 빠르게 만드는 것으로 생각된다. 그러나이 제한은 문제의 시나리오와 같은 유용한 시나리오를 방지합니다. 함수 적 종속성에 입력 매개 변수 간의 종속성을 설정할 수 있습니다 해킹이있다 :
export function withKey<a, b>(
value: a,
key: b,
toAssignable: (value: a) => { key: b } = function<c>(anything: c) : c {
return anything;
}
) : a {
toAssignable(value).key = key;
return value;
}
이 지옥으로 추한 외모와 원래의 서명을 변경하지만 컴파일 및 작동합니다.
더 좋은 방법을 알고 있습니까?
. 참고로 [Stack Overflow : TypeScript로 가져오고 설정하기] (http://stackoverflow.com/questions/12827266/get-and-set-in-typescript)를 참조하십시오. 그러나 일반적인 설정 개념을 고집한다면 언어 키워드' 인터페이스 '와'구현', 예. in [Stack Overflow : "클래스 선언"과 "인터페이스"의 차이점은 무엇입니까?] (http://stackoverflow.com/questions/14345485/whats-the-difference-between-declare-class-and-interface-in -typeescript) – xmojmr
일반 함수가 반 패턴이되었을 때부터? Classe는 너무 서투르므로 원하지 않는 오버 헤드가있는 객체로 인스턴스화해야합니다. –
반 패턴인지 여부에 대해서는 논쟁하지 않겠지 만, 어떻게 작동시킬 객체를 만들지 않고 * 정확히 당신의 방법을 사용하겠습니까? –