Controllo del tipo di interfaccia con Typescript

Questa domanda è l’analogone diretto al controllo del tipo di class con TypeScript

Devo scoprire a runtime se una variabile di tipo any implementa un’interfaccia. Ecco il mio codice:

interface A{ member:string; } var a:any={member:"foobar"}; if(a instanceof A) alert(a.member); 

Se inserisci questo codice nel campo giochi typescript, l’ultima riga sarà contrassegnata come un errore, “Il nome A non esiste nell’ambito corrente”. Ma non è vero, il nome esiste nello scopo attuale. Posso anche cambiare la dichiarazione della variabile in var a:A={member:"foobar"}; senza lamentele dall’editore. Dopo aver navigato sul web e aver trovato l’altra domanda su SO ho cambiato l’interfaccia in una class, ma poi non posso usare i letterali degli oggetti per creare istanze.

Mi sono chiesto come il tipo A potrebbe svanire in quel modo, ma uno sguardo al javascript generato spiega il problema:

 var a = { member: "foobar" }; if(a instanceof A) { alert(a.member); } 

Non esiste alcuna rappresentazione di A come interfaccia, pertanto non sono possibili verifiche di tipo runtime.

Capisco che javascript come linguaggio dinamico non ha concetto di interfacce. C’è un modo per digitare check per le interfacce?

Il complemento automatico del campo di gioco typescript rivela che typescript offre anche implements metodo. Come posso usarlo?