2017-04-23 1 views
0

méthode appel:dactylographiés n'a pas d'erreur de compilation bien mauvais type est passé à la méthode

this.onChangeScoreGradeType(this.gradingKeyForm.get("scoreGradeType").value.key); 

définition de la méthode:

onChangeScoreGradeType(scoreGradeType: KeyValue<string,string>) 
{ 

} 

this.gradingKeyForm.get("scoreGradeType").value 

est de type KeyValue<string,string>

Pourquoi se produit il n'y a pas d'erreur de compilation, que

this.gradingKeyForm.get("scoreGradeType").value.key 

qui est une chaîne ne rentre pas dans une instance KeyValue<string,string>?

Que dois-je modifier dans mes paramètres TypeScript?

export default class KeyValue<TKey,TValue> 
{ 
    constructor(public key: TKey,public value: TValue) 
    { 

    } 
} 

tsconfig.json

{ 
    "compilerOptions": { 
    "baseUrl": "", 
    "declaration": false, 
    "emitDecoratorMetadata": true, 
    "experimentalDecorators": true, 
    "lib": ["es6", "dom"], 
    "mapRoot": "./", 
    "module": "es6", 
    "moduleResolution": "node", 
    "outDir": "../dist/out-tsc", 
    "sourceMap": true, 
    "target": "es5", 
    "typeRoots": [ 
     "../node_modules/@types" 
    ] 
    } 
} 
+3

Pouvez-vous fournir la définition de 'KeyValue'? –

+0

Bien sûr ... voir ma mise à jour! – Pascal

+0

[J'ai compiler l'erreur ...] (https://www.typescriptlang.org/play/index.html#src=class%20KeyValue%3CTKey%2C%20TValue%3E%0D%0A%7B%0D%0A % 20% 20% 20% 20constructeur (public% 20key% 3A% 20TKey% 2C% 20public% 20value% 3A% 20TValue)% 0D% 0A% 20% 20% 20% 20% 7B% 0D% 0A% 0D% 0A% 20% 20% 20% 20% 7D% 0D% 0A% 7D% 0D% 0A% 0D% 0Afonction% 20onChangeScoreGradeType (scoreGradeType% 3A% 20KeyValue% 3Cstring% 2C% 20string% 3E)% 20% 0D% 0A% 7B% 0D % 0A% 0D% 0A% 7D% 0D% 0A% 0D% 0Allet% 20test% 20% 3D% 20new% 20KeyValue ('test% 20key'% 2C% 20'test% 20value ')% 3B% 0D% 0A% 0D % 0AonChangeScoreGradeType (test.key)% 3B) –

Répondre

0

Dans this.gradingKeyForm.get("scoreGradeType").value.key le type est TKey. Les génériques deviennent any s'ils ne peuvent être déduits. Par conséquent key est probablement de type any ce qui le rend compatible avec tout.

+0

Ok, si je faisais assigner le .value.key à une variable de chaîne et passais celui-là, cette compilation échoue parce que je l'ai déduit :-) Avec C# je reçois des erreurs de compilation sur 'ne peut être déduit ...' dommage que TypeScript se sent comme une copie bon marché de C#. – Pascal