Typescript指定返回或函数类型不相同

问题描述 投票:2回答:1
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
}

操场:https://www.typescriptlang.org/play/?ssl=15&ssc=2&pln=11&pc=2#code/MYewdgzgLgBAhgRgFwwBQEoYF4B8MDe8K0ATgJZgDmMAvtmprgQFAwwkCmUAriWAXBQByIQBoYAI2FC6AelkwwIWBxIkQ5KgEIA-MxrNmoSLDgAmehiSFBMUhWp0m+Vuy69++WyPFSYIuQUyCBhVdU1qOBCOAA8ABw5gKA4AE31DY2h4AGYUDGw8G2IoCNpLRkLXTh4+Aj8AmHkYYNC1DQd4aPjE5LSaIA

这些2应该是相同的东西,但是以某种方式a2出现打字错误。

我的代码以a1格式(定义了函数)完成,没有错误。如果不正确,我想知道该怎么办。

正如您在a3中所看到的,这是错误的。因此,它仍在检查类型,但不如a2中的准确。太奇怪了。

“打字稿”:“ ^ 3.7.2”

Error in ide

typescript
1个回答
0
投票
本质上,第一种情况是这样的:

const a1_anon = () => { return {a: '', b: ''} // not erroring!? } // inferred type of a1_anon is () => {a: string, b: string} const a1: () => { a: string } = a1_anon

如果您不希望发生这种情况,则需要指定类型,这样就不会像这样推断出来:

const a1: () => { a: string } = (): {a: string} => { return {a: '', b: ''} // not erroring!? }

我知道它被指定了两次,但是由于您坚持要定义一个匿名函数,然后将其分配给该变量,因此没有其他方法。
© www.soinside.com 2019 - 2024. All rights reserved.