gpt4 book ai didi

Typescript 泛型扩展类和接口(interface)

转载 作者:搜寻专家 更新时间:2023-10-30 20:33:02 27 4
gpt4 key购买 nike

我有一个 Typescript 类,其中包含一个泛型,它需要扩展另一个类并实现一个接口(interface)。这是一个例子

interface IHasImage {
imageUrl():string;
}
class Model {
}
class View<T extends Model & IHasImage> {
}

这是我在其他地方看到的那种语法,但是有没有办法在 Typescript 中做到这一点?

编辑:尝试将以下内容粘贴到 Playground 上:http://www.typescriptlang.org/Playground

...[removed edit 1 code]

编辑 2:答案和推理

(我很抱歉,第一个例子有一些缺陷!)我在下面标记了正确的答案,尽管它可能需要一些提示,如这个 github 问题 (https://github.com/Microsoft/TypeScript/issues/1885) 中所述

给定以下代码,您可以看到该方法有效。

playground screenshot

唯一要说的是,尝试从不扩展基类的类实现接口(interface)也会失败。但是,由于 Typescript 检查基于对象的结构,如果您手动将 name 属性添加到类中,它将成功。

enter image description here

这也是它在 ModelCorrect 上成功的原因,它扩展但没有实现

最佳答案

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();
}
}

编辑:在 TypeScript 1.6 中,您可以使用交集类型:

interface IHasImage {
imageUrl():string;
}

class Model {
}

class View<T extends IHasImage & Model> {
constructor(arg :T){
arg.imageUrl();
}
}

关于Typescript 泛型扩展类和接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28273714/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com