考虑以下代码块
interface Store {
loading: boolean;
}
interface StoreMethod {
(s: Store): Store;
}
export const createStore: StoreMethod = (store) => {
return { ...store, working: false };
}
export const loadStore: StoreMethod = (store) => {
return { loading: true, working: false };
}
我希望typescript会抛出错误,因为在返回对象中应该是Store
,它没有属性working
。我错过了什么吗?
您可以查看游乐场here中的代码。
答案 0 :(得分:3)
你需要理解你的代码转换你的代码到没有接口概念的普通javascript。
在打字稿类型中A
与B
类型兼容,如果A
具有B
所做的所有属性但是A不必具有确切的属性B具有,A
至至少的属性数量具有B
所做的属性,即{{1可以包含A
中不存在的其他属性。所以这个功能
B
返回的对象显然有一个名为export const loadStore: StoreMethod = (store) => {
return { loading: true, working: false };
}
的属性,它满足契约你的loading
强加,因此返回的对象被认为与Store
兼容,如果从返回的对象中删除Store
属性,typescript会抱怨。
typescript中的接口是一个设计工件,它在运行时不存在。