method call:
this.onChangeScoreGradeType(this.gradingKeyForm.get("scoreGradeType").value.key);
method definition:
onChangeScoreGradeType(scoreGradeType: KeyValue<string,string>)
{
}
this.gradingKeyForm.get("scoreGradeType").value
is of type KeyValue<string,string>
Why occurs there no compile error, that
this.gradingKeyForm.get("scoreGradeType").value.key
which is a string does not fit into a KeyValue<string,string>
instance?
What do I have to change in my TypeScript settings?
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"
]
}
}
In this.gradingKeyForm.get("scoreGradeType").value.key
the type is TKey
. Generics become any
if they cannot be inferred. Hence key
is probably of type any
which makes it compatible with everything.