在创建不强制执行任何原始值的对象文字时遇到问题。
当我尝试使用基元进行映射时
interface StringMap {[key:string]: string }
let foo:StringMap = {
"key_a": "bar",
"key_b": 12 //works as expected Type 'number' is not assignable to type 'string'
}
但是当我创建自己的对象时,地图结构并未得到实施。
class ChargeGroup{
}
interface ChargeGroupMap { [ key: string ]: ChargeGroup }
type ChargeGroupMap = { [ key: string ]: ChargeGroup } //tried this aswell
let foo:ChargeGroupMap = {
"key_c": new ChargeGroup()
"key_a": "bar", //no error
"key_b": 12, //no error
}
当前tsconfig.json
{
"compilerOptions":{
"target": "es6",
"strict": true,
"watch": true,
"lib": ["dom", "es2018"],
"types": [
"dinero.js",
"angular"
],
"allowUmdGlobalAccess": true,
"allowSyntheticDefaultImports": true,
"removeComments": true,
"alwaysStrict": true,
"outFile": "../script/invoice.js",
"noEmitOnError": true
},
"exclude": [
"node_modules"
]
}
在此问题上的任何帮助将不胜感激。
答案 0 :(得分:3)
您的课程为空。 Typescript使用结构兼容性,因此您的空类等效于{}
,即没有要求的类型。这意味着可以为它分配任何内容,包括number
或string
。将属性添加到类中后,您将收到错误消息。
class ChargeGroup{
private notStructural!: unknown
}
interface ChargeGroupMap { [ key: string ]: ChargeGroup }
let foo:ChargeGroupMap = {
"key_c": new ChargeGroup(),
"key_a": "bar", //no error
"key_b": 12, //no error
}