Typescript 中函数声明的可重用类型注释?

apo*_*llo 5 typescript

type Func = (foo:string) => void

// function expression
const myFunctionExpression:Func = function(foo) {
  console.log(foo)
}
Run Code Online (Sandbox Code Playgroud)

在上面的 Typescript 片段中,我使用类型别名来注释函数表达式中的变量。

类型别名:

type Func = (foo:string) => void
Run Code Online (Sandbox Code Playgroud)

可在另一个函数表达式中重用以减少重复。

我的问题是:有没有办法重用这个类型别名来注释函数声明?

// function declaration
function myFunctionDeclaration(foo:string):void {
  console.log(foo)
}
Run Code Online (Sandbox Code Playgroud)

在网上搜索后,我似乎找不到这样的语法,我错过了什么?

谢谢

更新:

在撰写本文时,github 上有一张请求此功能的票证:建议:函数声明的类型注释和接口 #22063(感谢来自 @jcalz 的评论)

Blo*_*sie 8

您可以使用 3.1 版中提供的 typescript 实用程序类型来实现此目的。

  1. Parameters<Type>: https: //www.typescriptlang.org/docs/handbook/utility-types.html#parameterstype
  2. ReturnType<Type>: https: //www.typescriptlang.org/docs/handbook/utility-types.html#returntypetype

适合问题的示例:

打字稿沙箱

type Func = (foo:string) => void

// function expression
const myFunctionExpression:Func = function(foo) {
  console.log(foo)
}
// function declaration
function myFunctionDeclaration(...[foo]: Parameters<Func>): ReturnType<Func> {
  console.log(foo)
}
Run Code Online (Sandbox Code Playgroud)

  • 虽然形式参数中的展开读起来有些尴尬,但它确实有效!谢谢你! (2认同)

Rya*_*ugh 6

在撰写本文时(TypeScript 3.4),还没有将类型应用于函数声明的方法。