在TypeScript中如何使用function关键字结合函数别名?
问题解决:用function声明匹配已定义的函数类型
你已经知道可以用箭头函数结合类型注解来匹配Foo类型:
type Foo = (s: string) => number; const foo: Foo = (s) => { return 1; }
但想用function声明语法实现同样效果时,之前的两种写法都有问题:
function foo: Foo(s)属于语法错误,TypeScript不支持这种写法function foo(s): Foo表示函数返回值是Foo类型(即返回一个符合Foo的函数),和你的需求不符
正确的实现方式
方法1:使用satisfies关键字(TypeScript 4.9+)
这个关键字可以让你在保留function声明语法的同时,检查函数是否符合目标类型:
type Foo = (s: string) => number; function foo(s: string): number { return 1; } satisfies Foo;
这样TypeScript会验证foo的参数和返回值是否匹配Foo类型,同时不会改变函数本身的类型推断。
方法2:类型断言 + 函数表达式
如果你需要兼容更早版本的TypeScript,可以用函数表达式结合类型断言:
type Foo = (s: string) => number; const foo = function(s: string) { return 1; } as Foo;
这种写法和你之前的箭头函数写法效果一致,只是换成了普通函数表达式。
方法3:显式对齐类型(最基础)
如果不需要强关联Foo类型,只是想让函数符合其定义,可以直接在function声明里写出参数和返回值类型:
type Foo = (s: string) => number; function foo(s: string): number { return 1; }
虽然没有直接引用Foo,但函数签名完全匹配,实际效果和匹配Foo类型一致。
内容的提问来源于stack exchange,提问作者Stefanie Gauss
相关产品推荐
相关产品推荐

