TypeScript 中的下限参数
Lower bounded parameters in TypeScript
我对 TypeScript 还很陌生,所以我很可能只是在做一些愚蠢的事情,但我发现似乎是错误或限制。我已经为接受 Foo
的函数定义了一个接口。如果我将该函数赋予另一个函数,契约似乎是我传递的函数必须采用 any Foo
。但是,如果我定义 class Bar extends Foo
,然后定义一个接受 Bar
而不是 Foo
的函数,我可以将其传递给需要接受任何 Foo
的函数的函数.示例:
class Foo {
}
class Bar extends Foo {
}
interface TakesAnyFoo {
(x: Foo) : void;
}
function needsAFunctionThatTakesAnyFoo(f: TakesAnyFoo) {
let foo = new Foo();
f(foo);
}
function takesOnlyABar(x: Bar) {
console.log(`I got ${x}`);
}
needsAFunctionThatTakesAnyFoo(takesOnlyABar);
我想也许我在这里需要的是 Java 的下限类型的等价物。类似于:
interface TakesAnyFoo<T super Foo> {
(x: T) : void;
}
但 Typescript 似乎没有这个。如何强制传递给 needsAFunctionThatTakesAnyFoo
的函数必须接受任何 Foo
作为其输入的约束?
简化您的代码我们有:
class Foo {
}
class Bar extends Foo {
}
function needsAFunctionThatTakesAnyFoo(f: (x: Foo) => void) {
let foo = new Foo();
f(foo);
}
needsAFunctionThatTakesAnyFoo((x: Bar) => { });
支持此功能以允许在事件处理程序中使用通用模式。例如将采用 MouseEvent
的函数赋予仅支持 Event
.
的事件规范
更多
此处介绍:
我对 TypeScript 还很陌生,所以我很可能只是在做一些愚蠢的事情,但我发现似乎是错误或限制。我已经为接受 Foo
的函数定义了一个接口。如果我将该函数赋予另一个函数,契约似乎是我传递的函数必须采用 any Foo
。但是,如果我定义 class Bar extends Foo
,然后定义一个接受 Bar
而不是 Foo
的函数,我可以将其传递给需要接受任何 Foo
的函数的函数.示例:
class Foo {
}
class Bar extends Foo {
}
interface TakesAnyFoo {
(x: Foo) : void;
}
function needsAFunctionThatTakesAnyFoo(f: TakesAnyFoo) {
let foo = new Foo();
f(foo);
}
function takesOnlyABar(x: Bar) {
console.log(`I got ${x}`);
}
needsAFunctionThatTakesAnyFoo(takesOnlyABar);
我想也许我在这里需要的是 Java 的下限类型的等价物。类似于:
interface TakesAnyFoo<T super Foo> {
(x: T) : void;
}
但 Typescript 似乎没有这个。如何强制传递给 needsAFunctionThatTakesAnyFoo
的函数必须接受任何 Foo
作为其输入的约束?
简化您的代码我们有:
class Foo {
}
class Bar extends Foo {
}
function needsAFunctionThatTakesAnyFoo(f: (x: Foo) => void) {
let foo = new Foo();
f(foo);
}
needsAFunctionThatTakesAnyFoo((x: Bar) => { });
支持此功能以允许在事件处理程序中使用通用模式。例如将采用 MouseEvent
的函数赋予仅支持 Event
.
更多
此处介绍: