【发布时间】:2019-12-19 11:21:52
【问题描述】:
const a1: () => { a: string } = () => {
return {a: '', b: ''} // not erroring!?
}
const a2 = ():{ a: string } => {
return {a: '', b: ''} // is erroring as expected
}
const a3: () => { a: string } = () => {
return {b: ''} // is erroring as expected
}
这两个应该是一样的,但不知何故 a2 有一个打字错误。
我的代码以 a1 的格式完成(定义了函数)并且没有出错。如果不正确,我想知道如何处理错误。
正如您在 a3 中看到的,它出错了。所以它仍在检查类型,但不如 a2 中准确。好诡异。
“打字稿”:“^3.7.2”
interface State {a:string}
const similarToRealWorldIssue: (state:State ) => State = (state) => {
return {...state, b: 'ssda'} // here I meant to put `a`, but I put `b` by mistake and nobody complained.
}
【问题讨论】:
-
我认为在第一种情况下,您将 ():{a:string, b:string} 分配给 ():{a:string} 类型的变量,这没有错,但在第二种情况下如果您定义 ():{a:string} 然后继续返回 is 错误的 {a:string, b:string}。
-
但是看看a3,它是错误的。根据您的解释,a3 应该不会出错。
-
在第三种情况下,您尝试将 ():{b:string} 分配给 ():{a:string} 类型的变量,这是错误的,因为您无法从 { b:string},但您可以从 {a:string, b:string} 中提取它。
-
那么a1和a2的返回类型是什么?如果你检查是完全一样的。但他们的行为不一样。我在文档中看不到任何地方,这取决于您定义函数的方式将匹配返回或仅包含返回。没有意义海事组织
-
a3 没有错,因为它返回 {b:string} 而是因为您将返回 {b:string} 的东西分配给期望返回 {a:string} 的变量并且有{b:string} 中没有 a:string。
标签: typescript