Typescript+不变性帮助程序#集



我加入了typescript的行列,我想在更新redux存储时继续使用这个不变性助手库,但由于某种原因,现在我在尝试执行更新时遇到了这个错误?:

[ts]类型为"{flags:{hideChat:{$set:boolean;};}"的参数不可分配给"Spec"类型的参数。对象文字只能指定已知的属性,而"flags"不能存在于类型"Spec"中。

export interface GlobalStateInit {
flags: {
hideChat: boolean
}
}
const initialState: GlobalStateInit = {
flags: {
hideChat: false
}
}
const reducer: Reducer<GlobalStateInit, GlobalAction> = (state = initialState, action) => {
switch (action.type) {
case getType(actions.toggleChat):
return update(state, {
flags: {
hideChat: { $set: !state.flags.hideChat }
}
})
default:
return state
}
}
export { reducer as GlobalReducer }

我认为这应该是微不足道的,应该开箱即用,我在后台运行的玩笑测试可以解决这个问题,但VScode TS Linter有点生气。

不确定这是一个错误,还是只是VScode搞砸了。

这是一个经过深思熟虑的编译器特性。以下是相同问题的简短版本:

interface Example {
name: string,
val: number
}
const example: Example = {
name: 'Fenton',
val: 1,
more: 'example'
}

more属性不是Example接口的一部分,因此编译器会警告您可能犯了错误。例如,如果有一个可选成员您键入错误,它会为您捕获:

interface Example {
name: string,
val: number,
side?: string
}
const example: Example = {
name: 'Fenton',
val: 1,
sdie: 'Left' // Oops, I meant "side"
}

在你认为自己比编译器更了解的情况下,你可以告诉它你是负责人:

interface Example {
name: string,
val: number
}
const example = {
name: 'Fenton',
val: 1,
more: 'example'
} as Example

这允许额外的成员,同时仍然确保你不会犯错误,例如:

// Lots of errors!
const example = {
more: 'example'
} as Example

最新更新