0
votes

La propriété n'existe pas sur l'interface

Je suis confus sur la manière dont les interfaces fonctionnent dans Thypothingscript.

Voici une partie de code: xxx

Il ne compilera pas et ne donnera pas l'erreur "Propriété FOO n'existe pas sur Type Test1. Cela signifie donc que lorsque vous implémentez une interface dans TypeScript, vous ne pouvez utiliser que les propriétés et les méthodes déclarées dans l'interface?

Je suis confus parce que je suis habitué à PHP et cela ne provoquera aucune erreur dans PHP.


1 commentaires

Comme Zmag l'a dit, c'est l'idée générale dans OOP. (Vous pouvez lire sur la covariance et la contrevariance, c'est intéressant;))


3 Réponses :


1
votes
let test: test2 = new test2();

test.foo = 'test';

1 commentaires

Cela compilerait effectivement, mais je souhaite utiliser une interface afin que je puisse avoir plusieurs classes passer le même type de type comme paramètre d'une fonction. Voici ma mise en œuvre concrète: Let Block: Blockinterface = nouveau questionnaire (); Fonction de fonctionnement (bloc: blockinterface) {....}



2
votes

Cela signifie donc que lorsque vous implémentez une interface dans TypeScript, vous ne pouvez utiliser que les propriétés et les méthodes déclarées dans l'interface?

non. Cela signifie que lorsque vous Référence une variable avec une interface spécifique dans TypeScript, vous ne pouvez utiliser que les propriétés et les méthodes déclarées dans l'interface de la variable.

Et c'est le concept général dans OOP.


1 commentaires

Ok, je l'obtiens et en pensant plus à ce sujet, cela a du sens, mais j'ai été confus car cela ne causera pas d'erreur dans PHP, alors je voulais savoir s'il s'agissait du comportement de PHP qui était anormal ou dossier, j'ai ma réponse maintenant.



0
votes

pense à 2 choses ici

  1. Si vous souhaitez initialiser une variable, il n'est pas nécessaire de fournir le type. LI> ol>
    interface test1 { }
    class test2 implements test1{
        public foo;
    }
    let test: test1 | any = new test2();
    test.foo = 'test';
    


0 commentaires