为什么可以';尽管函数表达式在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