尽管将错误的类型传递给方法,但TypeScripts没有编译时错误

时间:2017-04-23 15:52:39

标签: typescript typescript2.2

方法调用

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

方法定义

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

}

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

的类型为KeyValue<string,string>

为什么没有编译错误,

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

这是一个不适合KeyValue<string,string>实例的字符串?

我在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"
    ]
  }
}

1 个答案:

答案 0 :(得分:0)

this.gradingKeyForm.get("scoreGradeType").value.key中,类型为TKey。如果无法推断泛型,则泛型变为any。因此key可能属于any类型,这使其与所有内容兼容。