我有一个Typescript类,其中包含一个需要扩展另一个类并实现接口的泛型.这是一个例子
interface IHasImage {
imageUrl():string;
}
class Model {
}
class View<T extends Model & IHasImage> {
}
Run Code Online (Sandbox Code Playgroud)
这是我在其他地方看到的那种语法,但有没有办法在Typescript中这样做?
编辑:尝试将以下内容粘贴到游乐场:http://www.typescriptlang.org/Playground
...[removed edit 1 code]
Run Code Online (Sandbox Code Playgroud)
编辑2:答案和推理
(我道歉,第一个例子有一些缺陷!)我在下面标记了正确的答案,虽然它可能需要一些指针,如本github问题所述(https://github.com/Microsoft/TypeScript/issues/1885)
鉴于以下代码,您可以看到该方法有效.

唯一要说的是,尝试implement从不扩展基类的类接口也会失败.但是,因为Typescript检查基于对象的结构,所以如果手动将name属性添加到类中,它将成功.

这也是为什么它与成功,ModelCorrect这extends却并不implements.
Mag*_*agu 17
Typescript不像Java或C#那么严格,所以你可以这样做:
interface IHasImage {
imageUrl():string;
}
class Model {
}
// use the Model class like an interface
interface IHasImageModel extends IHasImage, Model{
}
class View<T extends IHasImageModel> {
constructor(arg :T){
arg.imageUrl();
}
}
Run Code Online (Sandbox Code Playgroud)
编辑: 在TypeScript 1.6中,您可以使用交集类型:
interface IHasImage {
imageUrl():string;
}
class Model {
}
class View<T extends IHasImage & Model> {
constructor(arg :T){
arg.imageUrl();
}
}
Run Code Online (Sandbox Code Playgroud)
dig*_*ire 13
看起来这是我能找到的唯一方法。不完全干净,但它做正确的事情。
interface IHasImage extends Model{
imageUrl():string;
}
class Model {
}
class View<T extends IHasImage> {
}
Run Code Online (Sandbox Code Playgroud)
这是操场上的屏幕截图,验证了它的工作原理:

编辑:添加了正确的解决方法。
| 归档时间: |
|
| 查看次数: |
37592 次 |
| 最近记录: |