TypeScript에서 컨테이너를 만듭니다. 그것은 어떤 컨테이너가 될 수 있지만, 나는 다음과 같은 간단한 예제를 사용합니다 : 특정 메소드에 대한 일반 클래스를 제한 할 수 있습니까?
class Container<T> {
val: T;
constructor(t: T) {
this.val = t;
}
}
가 나는의 숫자와 두 개의 용기가 있다면, 나는 쉽게로 새 컨테이너를 만들 수 있도록 기능을 제공하고 싶은 말을 그 숫자들은 합쳐졌다.
class Container<T> {
val: T;
constructor(t: T) {
this.val = t;
}
add(c: Container<number>): Container<number> {
return new Container(this.val + c.val);
}
}
그러나 위 코드를 typecheck 할 수 있는지는 알 수 없습니다. 문제는 내가 this.val
에 대해 알고있는 것이 그것이 T
(이것은 아무것도 아님)이라는 것입니다. 어떻게 든 add
메서드를 제한하여 Container<T>
의 인스턴스에서만 호출 할 수 있도록하려는 경우 T == number
입니다. TypeScript에서 가능합니까?
위의 예는 단지 인위적인 예입니다. 내가 실제로하고 싶은 것은 응용 펑터 (functor)를위한 TypeScript 인터페이스를 만드는 것입니다.
ap<A, B>(c: Container<A>): Container<B> {
return new Container(this.val(c.val));
}
그래서이 경우에는 내가
T == (a: A) => B
있음을 알고 있어야합니다 :는 실용적 기능은
Container
이 같을 것이다 방법이있다.
interface Applicative<T> {
...
ap: <A, B>(a: Applicative<A>) => Applicative<B> // where T == (a: A) => B
...
}
이 중 하나라도 가능 : 더 일반적으로 나는이 인터페이스를 정의 할 수 있도록하고 싶습니다?
안내서가 있습니다. https://www.typescriptlang.org/docs/handbook/generics.html#generic-constraints – toskv
설명서를 읽었습니다. 그러나 함수에 일반 제약 조건을 추가하는 방법 만 보여줍니다. 내가 알 수있는 한 내 문제가 해결되지 않는다. – paldepind
하나의 방법으로 t를 구속하는 것은 불가능합니다. – toskv