214 votes

Tapuscrit: casting HTMLElement

quelqu'un sait comment le cast en caractères d'imprimerie?

Je suis en train de faire ceci:

var script:HTMLScriptElement = document.getElementsByName("script")[0];
alert(script.type);

mais il me donne une erreur:

Cannot convert 'Node' to 'HTMLScriptElement': Type 'Node' is missing property 'defer' from type 'HTMLScriptElement'
(elementName: string) => NodeList

Je ne peux pas accéder à la fonction "type" membre de l'élément script à moins que je jette à la type correct, mais je ne sais pas comment faire. j'ai cherché de la documentation et des échantillons, mais je ne pouvais pas trouver quoi que ce soit.

275voto

Spongman Points 1764

La machine utilise '<>' entourer de moulages, de sorte que le ci-dessus devient:

var script = <HTMLScriptElement>document.getElementsByName("script")[0];

Toutefois, malheureusement, vous ne peut pas faire:

var script = (<HTMLScriptElement[]>document.getElementsByName(id))[0];

Vous obtenez le message d'erreur

Cannot convert 'NodeList' to 'HTMLScriptElement[]'

Mais vous pouvez le faire :

(<HTMLScriptElement[]><any>document.getElementsByName(id))[0];

36voto

Steve Fenton Points 55265

Comme de Tapuscrit 0.9 lib.d.ts le fichier utilise spécialisés surcharge de signatures qui retournent des types appropriés pour les appels à l' getElementsByTagName.

Cela signifie que vous n'avez plus besoin d'utiliser le type d'assertions pour modifier le type:

// No type assertions needed
var script: HTMLScriptElement = document.getElementsByTagName('script')[0];
alert(script.type);

21voto

Jack128 Points 280

Vous pouvez toujours hack type de système à l'aide de:

var script = (<HTMLScriptElement[]><any>document.getElementsByName(id))[0];

9voto

Bill Ticehurst Points 551

Juste pour préciser, c'est correct..

Impossible de convertir de 'NodeList' à 'HTMLScriptElement[]'

..comme une NodeList n'est pas un tableau réel (par exemple, ne contient pas .forEach .d'une tranche, d' .pousser, etc...). Ainsi, s'il n'a convertir HTMLScriptElement[] dans le système de type, vous obtiendrais pas d'erreurs de type si vous avez essayé d'appeler Tableau.prototype membres au moment de la compilation, mais il ne pourrait pas lors de l'exécution.

3voto

Tobiasz Cudnik Points 2542

Cela semble résoudre le problème, à l'aide de l' [index: TYPE] tableau type d'accès, des acclamations.

interface ScriptNodeList extends NodeList {
    [index: number]: HTMLScriptElement;
}

var script = ( <ScriptNodeList>document.getElementsByName('foo') )[0];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X