gpt4 book ai didi

javascript - 在 Closure 中检测接口(interface)和鸭子类型

转载 作者:行者123 更新时间:2023-11-30 12:03:09 24 4
gpt4 key购买 nike

Closure 库中有几个地方的接口(interface)有一对 addImplementation/isImplementedBy 函数来对接口(interface)进行运行时类型检查(类似于 this answer )。我不完全喜欢这个解决方案,因为我有一些非常简单的东西。有没有办法在启用 ADVANCED_OPTIMIZATIONS 的情况下进行鸭子打字?假设我有一个界面,以及一个对具有该界面的 child 执行特殊操作的组件,例如:

/** @interface */
MyInterface = function() {};

MyInterface.prototype.doSomething = function() {};

/**
* @constructor
* @extends {goog.ui.Component}
*/
MyComponent = function() {
...
};

/** @inheritDoc */
MyComponent.prototype.addChild = function(child, opt_render) {
goog.base(this, 'addChild', child, opt_render);
if (child.doSomething) {
child.doSomething();
}
};

ADVANCED_OPTIMIZATIONS 是否会在实现中始终如一地重命名“doSomething”属性?如果不是,添加类型联合会确保它会吗?例如

/**
* @param {goog.ui.Component|MyInterface} child
*/
MyComponent.prototype.addChild = function( child, opt_render) {
if (child.doSomething) {
child.doSomething();
}
};

最佳答案

这就是添加@record 的目的。您需要使用最新版本的编译器才能使用它(至少是 2016 年的版本)。

只需将 @interface 替换为 @record 即可,您应该会得到您想要的行为。编译器会一致地重命名。

关于javascript - 在 Closure 中检测接口(interface)和鸭子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36091714/

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