typescript 如何定义命名函数的类型?

jrcvhitl  于 2023-06-07  发布在  TypeScript
关注(0)|答案(3)|浏览(192)
function Foo(): string {}

表示Foo是一个返回string的函数。

interface SFC {
    (props: Props): any;
}

const Foo: SFC = p => {};

意味着Foo是一个匹配签名SFC的匿名函数,p的类型为Props
如何声明与SFC匹配的function Foo()?语法是什么?
也就是说,我想使用function关键字(而不是const)声明一个函数,并且该函数本身的类型为SFC
这些不起作用:

function Foo: SFC () {}
function Foo() {}: SFC
dldeef67

dldeef671#

有许多TypeScript提案用于显式键入声明为命名的提升函数(而不是表达式)的函数。这些建议都还没有得到执行。#22063似乎是最活跃的。

  • #16918:(建议)函数声明的上下文类型语法
    *#22063:建议:函数声明的类型注解和接口
  • 复制#37433:添加指定函数声明类型的机制
  • 复制#39419:允许类型化函数声明
  • 复制#40455:提供一种方法来指示函数声明符合某些接口/类型
  • #34319:使用接口描述函数签名
  • 复制#39039:函数声明“实现”类型的语法(如const C: React.FC<Props> = (props0) => ...
  • #40378:在FunctionDeclaration上进行类型转换或Assert

TypeScript 4.9中satisfies关键字(#47920#46827)的发布是相关的,但仅适用于表达式;它不改变函数定义。开放问题#51556声称在#47920上使用satisfies进行功能跟踪,而#52195被欺骗了。

vc9ivgsu

vc9ivgsu2#

TypeScript使用duck typing,因此如果Foo函数的结构匹配,则其类型为SFC

interface SFC {
    (props: any): any;
}

function Foo(props: any): any {
    console.log(props);
}

let sfc: SFC = Foo; // Foo is of type SFC.
sfc("Foo");
a11xaf1n

a11xaf1n3#

我想使用function关键字(不是const)声明一个函数,并且函数本身是SFC类型。
你不能。你也不应该这么做,因为const给了你所需要的一切。

name属性

好的浏览器会为您添加这些内容,例如。 chrome 。

相关问题