No ActionScript, é possível verificar o tipo em tempo de execução usando o operador is :
var mySprite:Sprite = new Sprite();
trace(mySprite is Sprite); // true
trace(mySprite is DisplayObject);// true
trace(mySprite is IEventDispatcher); // true
É possível detectar se uma variável (estende ou) é uma determinada classe ou interface com o TypeScript?
Não consegui encontrar nada sobre isso nas especificações de idioma. Deve estar lá quando se trabalha com classes / interfaces.
fonte
Std.is(pet, Fish)
, que funciona em tipos, as interfaces etc.isFish
próprio é o predicado que é criado, e seu corpo não precisa ser um predicado de uma linha. A vantagem disso é que o compilador entende em tempo de compilação as funções possíveis apropriadas, mas seu código internoisFish
é executado em tempo de execução. Você pode até fazer com que o guarda contenha umainstanceof
declaração, por exemploreturn pet instanceof Fish
(supondo que seja uma classe e não uma interface), mas isso seria desnecessário, pois o compilador entendeinstanceof
diretamente.(pet as Fish)
pois o tslinter irá reclamar(<Fish>pet)
. Veja tslint docVocê pode usar o
instanceof
operador para isso. Do MDN:Se você não souber o que são protótipos e cadeias de protótipos, recomendo que procure. Também aqui está um exemplo de JS (TS funciona de maneira semelhante a esse respeito) que pode esclarecer o conceito:
A cadeia de protótipos neste exemplo é:
animal> Animal.prototype> Object.prototype
fonte