node.js - Typescript:instanceof 检查不会智能转换

标签 node.js typescript casting return instanceof

我有一个事件监听器回调,如下所示:

function(ev: Event) {
    var userBox = id("user-box");
    var target = ev.target;
    // here
}

现在,我需要将目标转换到元素。 为什么会编译:

function(ev: Event) {
    var userBox = id("user-box");
    var target = ev.target;
    if (target instanceof Element) {
        if (userBox.contains(target)) {
            // do something
        }
    }
}

...但这不是吗?

function(ev: Event) {
    var userBox = id("user-box");
    var target = ev.target;
    if (target !instanceof Element) {
        return;
    }
    if (userBox.contains(target)) {
        // do something
    }
}

最佳答案

variable instanceof XYZ 是生成 bool 值的单个操作。可以通过添加括号来反转:!(target instanceof Element)。当你瞄准时! instanceof Element,您将在 target 上调用 TypeScript 中的非空断言运算符,这是一个编译时断言。

例如

function(ev: Event) {
    var userBox = id("user-box");
    var target = ev.target;
    if (!(target instanceof Element)) {
        return;
    }
    if (userBox.contains(target)) {
        // do something
    }
}

关于node.js - Typescript:instanceof 检查不会智能转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64193429/

相关文章:

node.js - AWS Lambda 上的 Apollo Gateway 无法读取未定义的属性 'content-type'

javascript - 从数组中删除已删除的值

javascript - typescript 抽象可选方法

c++ - 转换 Const 指针以使用遗留 C 代码

json - 无法在 React 应用程序中访问来自 Express 服务器的响应数据

angularjs - 同时使用 Angular RouteProvider 和 Express 路由

node.js - React Native 在有/没有 wifi 的情况下获取不同的结果

即使我引用了该函数,JavaScript 函数也会被事件监听器多次调用

c - 解释使用void指针的区别

当间隔是字符串连接的结果时,Postgresql 会报错