我正在尝试使用类型别名简化TypeScript中的签名:
interface State {
value: string;
error: string;
}
type Reducer = (value: string) => (state: State) => State;
const setValue: Reducer = value => state => ({
...state,
value,
unknownProperty: "Hello"
});
我希望这会失败,因为我试图设置一个不存在的属性。
当我这样做时,确实失败了:
const setValue2 = (value: string) => (state: State): State => ({
...state,
value,
unknownProperty: "Hello"
});
带有错误信息:对象文字只能指定已知属性,而“unknownProperty”不存在于类型“State”中
,这正是我想要的。
两者有什么区别?为什么一个可以编译,但另一个不行?如何像第一个例子中使用单独定义那样强制执行类型安全性?