javascript - propiedades - Verificación del tipo de clase con TypeScript
tipos de datos en angular (2)
Estoy muy entusiasmado con TypeScript , así que comencé a jugar con él. Como desarrollador de Actionscript, hace que Javascript sea menos difícil.
Sin embargo, en Actionscript es posible verificar el tipo en tiempo de ejecución usando el operador is :
var mySprite:Sprite = new Sprite();
trace(mySprite is Sprite); // true
trace(mySprite is DisplayObject);// true
trace(mySprite is IEventDispatcher); // true
¿Es posible detectar si una variable (extends o) es una determinada clase o interfaz con TypeScript? No pude encontrar nada al respecto en las especificaciones del idioma, debería estar allí cuando se trabaja con clases / interfaces.
Actualización: unos años después. Retiré TypeScript muy rápido y comencé a usar Haxe que compila a JavaScript excelente y tiene verificación de tipos real que funciona en clases, interfaces, etc. También tiene eliminación de código muerto, mejores enumeraciones, tipos abstractos y funciones de tiempo de compilación (macros), también compila a un archivo por lo que no se necesita un sistema complejo de compilación de paquetes.
4.19.4 El operador de instanceof
El operador
instanceof
requiere que el operando izquierdo sea de tipo Any, un tipo de objeto o un tipo de parámetro de tipo, y el operando derecho sea de tipo Any o un subtipo del tipo de interfaz ''Function''. El resultado siempre es del tipo primitivo booleano.
Entonces podrías usar
mySprite instanceof Sprite;
Tenga en cuenta que este operador también está en ActionScript pero ya no debería usarse allí:
El operador is, que es nuevo para ActionScript 3.0, le permite probar si una variable o expresión es miembro de un tipo de datos dado. En versiones anteriores de ActionScript, el operador instanceof proporcionaba esta funcionalidad, pero en ActionScript 3.0 el operador instanceof no se debe usar para probar la membresía del tipo de datos. El operador is se debe usar en lugar del operador instanceof para la verificación manual de tipo, porque la expresión x instanceof y simplemente verifica la cadena prototipo de x para la existencia de y (y en ActionScript 3.0, la cadena del prototipo no proporciona una imagen completa de la jerarquía de herencia).
La instanceof
de TypeScript comparte los mismos problemas. Como es un idioma que todavía está en desarrollo, le recomiendo que formule una propuesta de tal facilidad.
Ver también:
- MDN: instanceof
TypeScript tiene una forma de validar el tipo de una variable en tiempo de ejecución. Puede agregar una función de validación que devuelva un predicado de tipo . De modo que puede llamar a esta función dentro de una instrucción if y asegurarse de que todo el código dentro de ese bloque sea seguro de usar como el tipo que cree que es.
Ejemplo de los documentos de TypeScript:
function isFish(pet: Fish | Bird): pet is Fish {
return (<Fish>pet).swim !== undefined;
}
// Both calls to ''swim'' and ''fly'' are now okay.
if (isFish(pet)) {
pet.swim();
}
else {
pet.fly();
}
Ver más en: https://www.typescriptlang.org/docs/handbook/advanced-types.html