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

mpe*_*pen 10 syntax typescript

function Foo(): string {}
Run Code Online (Sandbox Code Playgroud)

意味着 aFoo是一个返回 a 的函数string。

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

const Foo: SFC = p => {};
Run Code Online (Sandbox Code Playgroud)

表示这Foo是一个与签名匹配的匿名函数,SFC并且p类型为Props。

我如何声明function Foo()匹配SFC?语法是什么?

即,我想使用function关键字 (not const)声明一个函数,并且该函数本身的类型为SFC。


这些不起作用:

function Foo: SFC () {}
function Foo() {}: SFC
Run Code Online (Sandbox Code Playgroud)

Jef*_*ica 13

有许多 TypeScript 建议用于显式键入声明为命名提升函数(而不是表达式)的函数。其中还没有一个被实施。#22063看来是最活跃的。

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

satisfiesTypeScript 4.9 中该关键字的发布( #47920、#46827)相关,但仅适用于表达式;它不会更改函数定义。未解决的问题#51556satisfies声称用on 函数来跟进 #47920 ,而#52195则被欺骗了。