匿名函数是什么打字稿类型?
what typescript type would an anonymous function be?
谢谢我正在学习在 .d.ts
文件中声明函数
我的javascript有
function generate(romeo) {
return function(juliet) {
return romeo + juliet
}
}
打字稿声明
/**
* Function that accepts strings and returns composed function.
*/
export function generate(romeo: string): (juliet: string) => string;
对象?
- 找到一个
object
非原始类型
- 未找到任何
function
类型
- 哪些类型是合法的?
正如 VLAZ 在评论中指出的那样,类型 Function
存在,但它不是很有用:TypeScript 的重点是确定 returned 的类型,以及 Function不表示其参数或 return 值。
如 function type expressions 上的文档中所述,您可以像这样定义函数类型:
type FunctionType = (param1: SomeParameter) => SomeReturnValue;
对于你的情况,它看起来像这样:
/**
* Function that accepts strings and returns composed function.
*/
export function generate(romeo: string): (juliet: string) => string;
您需要指定 一些 类型的 return 值,以便 TypeScript 将其识别为函数类型,可以是 any
或 unknown
但理想情况下将是更具体的类型,如上面的 string
。 (和往常一样,如果函数没有有用的 return 值,那么 void
是合适的。)还有一种方法可以指定 , which is described in the docs as call signatures.
作为类型别名
type Fn = (s1: string) => (s2: string) => string
这可能是最好的阅读方式:采用字符串 s1
的函数和 return 另一个采用字符串 s1
的函数。第二个函数return是一个字符串。
这里的好处是函数符号一致。
如果需要更清晰,也可以用额外的分组括号编写:type Fn = (s1: string) => ((s2: string) => string)
作为界面
interface Fn {
(s1: string): (s2: string) => string
}
意思同上。由于 :
和 =>
混合表示 return 值,因此(至少在我看来)阅读起来更加混乱。
作为函数定义的一部分
function generate(romeo: string): (juliet: string) => string {
return function(juliet: string): string {
return romeo + juliet
}
}
如果你真的不需要一个单独的类型。请注意,类型注释中的参数名称和实际函数定义不需要匹配。以下是等价的:
function generate(romeo: string): (s: string) => string {
return function(juliet: string): string {
return romeo + juliet
}
}
如果您没有来自 TypeScript ESLint(或等效的)的 explicit-function-return-types
linter 规则,那么您可以让 TypeScript 推断类型:
function generate(romeo: string) {
return function(juliet: string) {
return romeo + juliet
}
}
谢谢我正在学习在 .d.ts
文件中声明函数
我的javascript有
function generate(romeo) {
return function(juliet) {
return romeo + juliet
}
}
打字稿声明
/**
* Function that accepts strings and returns composed function.
*/
export function generate(romeo: string): (juliet: string) => string;
对象?
- 找到一个
object
非原始类型 - 未找到任何
function
类型 - 哪些类型是合法的?
正如 VLAZ 在评论中指出的那样,类型 Function
存在,但它不是很有用:TypeScript 的重点是确定 returned 的类型,以及 Function不表示其参数或 return 值。
如 function type expressions 上的文档中所述,您可以像这样定义函数类型:
type FunctionType = (param1: SomeParameter) => SomeReturnValue;
对于你的情况,它看起来像这样:
/**
* Function that accepts strings and returns composed function.
*/
export function generate(romeo: string): (juliet: string) => string;
您需要指定 一些 类型的 return 值,以便 TypeScript 将其识别为函数类型,可以是 any
或 unknown
但理想情况下将是更具体的类型,如上面的 string
。 (和往常一样,如果函数没有有用的 return 值,那么 void
是合适的。)还有一种方法可以指定
作为类型别名
type Fn = (s1: string) => (s2: string) => string
这可能是最好的阅读方式:采用字符串 s1
的函数和 return 另一个采用字符串 s1
的函数。第二个函数return是一个字符串。
这里的好处是函数符号一致。
如果需要更清晰,也可以用额外的分组括号编写:type Fn = (s1: string) => ((s2: string) => string)
作为界面
interface Fn {
(s1: string): (s2: string) => string
}
意思同上。由于 :
和 =>
混合表示 return 值,因此(至少在我看来)阅读起来更加混乱。
作为函数定义的一部分
function generate(romeo: string): (juliet: string) => string {
return function(juliet: string): string {
return romeo + juliet
}
}
如果你真的不需要一个单独的类型。请注意,类型注释中的参数名称和实际函数定义不需要匹配。以下是等价的:
function generate(romeo: string): (s: string) => string {
return function(juliet: string): string {
return romeo + juliet
}
}
如果您没有来自 TypeScript ESLint(或等效的)的 explicit-function-return-types
linter 规则,那么您可以让 TypeScript 推断类型:
function generate(romeo: string) {
return function(juliet: string) {
return romeo + juliet
}
}