为什么可以';尽管函数表达式在TypeScript中没有返回任何内容,但我是否仍将其注释为void?

为什么可以';尽管函数表达式在TypeScript中没有返回任何内容,但我是否仍将其注释为void?,typescript,Typescript,我有一个不返回任何内容的函数表达式。但是,以下方法不起作用 let printHello: void = (): void => console.log('Hello!'); 但是,如果我将类型更改为对象,它会工作 let printHello: object = () => console.log('Hello!'); 我想我已经控制了实际的功能。但是,我似乎无法正确注释变量printHello。TS变量声明始终采用相同的形式: let <name>[: <t

我有一个不返回任何内容的函数表达式。但是,以下方法不起作用

let printHello: void = (): void => console.log('Hello!');
但是,如果我将类型更改为
对象
,它会工作

let printHello: object = () => console.log('Hello!');

我想我已经控制了实际的功能。但是,我似乎无法正确注释变量
printHello

TS变量声明始终采用相同的形式:

let <name>[: <type>][ = <value>];
(该函数还有
:void
返回类型,但这是值的一部分,因此与此处无关。)

但是,如果从声明中删除显式类型,则可以推断值的实际类型:

let printHello = (): void => console.log('Hello!');
is不是
无效
,它是()=>无效-值本身不是未定义的,它是返回未定义的函数。因此,如果您确实希望显式地包含该类型而不依赖于推理(推理),则必须:

let printHello: () => void = (): void => console.log('Hello!');
//     name   |    type    |    value

object
之所以有效,不是因为函数返回了一个对象(它没有),而是因为函数是一个对象。

因为函数本身不是void,所以它是一个函数<代码>让printHello:()=>void=()=>console.log('Hello!')会起作用。你说“没有胖箭头”是什么意思?哪一个?对于函数类型,
()=>void
,它是必需的,尽管另一部分可以是常规函数
function(){console.log('Hello!');}
。啊,好的。。。我想我刚刚明白了。所以基本上,
let printHello:()=>void
表示变量
printHello
的类型为
()=>void
。。。然后是实际的函数定义。对吗?总是一样的:
let:=。您的类型是
void
,但值是一个函数。@jonrsharpe这是标准做法吗?或者您认为只做
let printHello=()=>console.log('Hello!')更好吗
let printHello: () => void = (): void => console.log('Hello!');
//     name   |    type    |    value