node.js - Typescript: instanceof-kontroll gör ingen smart typkonvertering
Jag har en händelselyssnaråteruppringning som så här:
function(ev: Event) {
var userBox = id("user-box");
var target = ev.target;
// here
}
Nu behöver jag kasta target till Element. Varför kompilerar detta:
function(ev: Event) {
var userBox = id("user-box");
var target = ev.target;
if (target instanceof Element) {
if (userBox.contains(target)) {
// do something
}
}
}
... men det här gör inte det?
function(ev: Event) {
var userBox = id("user-box");
var target = ev.target;
if (target !instanceof Element) {
return;
}
if (userBox.contains(target)) {
// do something
}
}
Svar #1
variable instanceof XYZ är en enda operation som ger ett boolean-värde. Den kan inverteras genom att lägga till parenteser: !(target instanceof Element). När du gör target! instanceof Element anropar du icke-null-assertionsoperatorn i TypeScript på target, vilket är en kompileringstid-assertion.
t.ex.
function(ev: Event) {
var userBox = id("user-box");
var target = ev.target;
if (!(target instanceof Element)) {
return;
}
if (userBox.contains(target)) {
// do something
}
}
