首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法在TypeScript中扩展类型

无法在TypeScript中扩展类型
EN

Stack Overflow用户
提问于 2015-08-07 12:11:59
回答 1查看 213关注 0票数 0

我试图用一个额外的方法扩展jQuery不显眼的验证接口,但出于某种原因,它根本不会获得接口。下面的代码片段是我尝试在TypeScript操场上作为测试运行的一个简单片段,但它声称它“无法找到名称'Validator'",这很奇怪,因为这个代码片段遵循在TypeScript中增强类型的一般语法,而且在这个answer中使用的语法与完全相同。

代码语言:javascript
运行
复制
interface Validator {
    parseDynamicContent: (selector: string) => void;
}

Validator.prototype.parseDynamicContent = function (selector: string): void {

}

我是做错什么了,还是TypeScript坏了.再次?

EN

回答 1

Stack Overflow用户

发布于 2015-08-26 16:59:16

接口未转换为JavaScript代码。它们只存在于类型检查的编译过程中。您不能扩展一个不使用exist.The的构造函数--通常的方法是创建一个实现Validator的类。

现在,虽然TypeScript不允许类和接口的合并,但它确实允许将var与接口合并,并且var可以包含Validator的实现。下面是它的工作原理:

代码语言:javascript
运行
复制
export interface Validator {
    parseDynamicContent: (selector: string) => void;
}

然后创建一个实现类。除非您希望其他类扩展它的行为,否则可以将其隐藏起来。

代码语言:javascript
运行
复制
class ValidatorImpl implements Validator {
    constructor() {}
    parseDynamicContent: (selector: string) => void;
}

现在,创建与接口合并的var。var将具有一个与ValidatorImpl的静态侧匹配的类型,其中包括构造函数和所有成员显式声明的static。此变量将为其分配实现类:

代码语言:javascript
运行
复制
var Validator: {
    new(): Validator;
} = ValidatorImpl;

回想一下,类是构造函数,这就是为什么分配是兼容的。将这些代码放在一个文件中,上面的代码片段编译成以下代码:

代码语言:javascript
运行
复制
var ValidatorImpl = (function () {
    function ValidatorImpl() {
        this.parseDynamicContent = null;
    }
    return ValidatorImpl;
})();
var Validator = ValidatorImpl;

所以你拿了你的蛋糕然后吃了它。您可以在派生自Validator或从头开始的类中实现ValidatorImpl,也可以完全忘记类--任何动态创建的包含具有正确类型的成员parseDynamicContent的记录都将在任何需要Validator的地方被接受。

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31877439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档