我在打字稿中发现,您可以简单地使用declare
关键字声明函数类型,例如:
declare function test1(name: string): true
const t1 = test1('t') // true
我也可以使用箭头符号来做到这一点:
const test2 = (name: string) => true
const t2 = test2('t') // boolean
它们两者都工作正常,没有任何编译器错误。但是,即使我将它们同时指定为true
,似乎最终的推断类型也不相同吗?
同时,如果我将返回类型true
更改为常规基本类型,例如string
,第二个示例将给我一个错误:
declare function test1(name: string): string // ok
const test2 = (name: string) => string // error: 'string' only refers to a type, but is being used as a value here.
对于“箭头函数表示法”类型,您必须将返回结果/类型指定为特定结果,例如,如果将其放入最终结果中,泛型也没有意义:< / p>
declare function test1<T>(name: T): T // ok
const test2 = <T>(name: T) => T // error: 'T' only refers to a type, but is being used as a value here.
但是,它们都不都是“看起来像类型” ,我的意思是,您可以使用const
关键字来定义它们(在第二个示例中,通常是(根据我的知识声明变量),然后您可以像普通函数一样调用它们,它将为您提供返回类型/结果,而无需实现实际的详细信息:
test1('xxx')
test2('xxx')
所以我的问题是:
答案 0 :(得分:1)
当您declare
进行操作时,它只是告诉TypeScript编译器在运行时将存在该函数/变量/类等,并在编译期间将其删除。您指定该事物的 type (或函数的函数签名):
// these are the same
declare function test1(name: string): true
declare const test1: (name: string) => true
test1('') // true
您使用test2
所做的是创建了一个箭头函数,该函数将在运行时存在,因为您没有使用declare
关键字并提供了实现:
// these are also the same
function test2(name: string) {
return true
}
const test2 = (name: string) => true
test2('') // boolean
由于未明确声明返回类型,因此TypeScript推断返回类型为boolean
。要指定它为true
:
function test3(name: string): true {
return true
}
const test3 = (name: string): true => true
test3('') // true