[英]typescript: void parameter type in function type declaration
我正在开始我的ts
之旅,现在正在研究TypeGraphQL 。 我注意到一些我不理解和以前从未见过的东西:
export declare type ReturnTypeFunc = (returns?: void) => ReturnTypeFuncValue;
应该如何解释该类型? 这个(returns?: void)
代表什么?
ReturnTypeFunc
类型在Query
装饰器中使用:
export declare function Query(returnTypeFunc: ReturnTypeFunc, options?: AdvancedOptions): MethodDecorator;
Query
装饰器通常是这样使用的:
@Query(returns => [SampleObject])
据我所知,添加了returns
参数以帮助提高可读性:此查询返回一个SampleObject
数组。 如果删除类型ReturnTypeFunc
中的returns
参数,则不能再这样做,而必须改写@Query(() => [SampleObject])
。
其他一些具有可选 void 参数的装饰器是:
@Resolver(of => Recipe) // This is a resolver for Recipe. See type ClassTypeResolver
@Field(type => [Rate]) // This field is of type Rate. See type ClassTypeResolver.
编辑:
null
(如果未指定strictNullChecks
)或undefined
分配给void
类型的变量。ReturnTypeFunc
的函数。 这些参数是void
类型的唯一原因是为了提高代码的可读性。您描述的函数签名在这里,出于多种原因,可以编写void
类型的可选参数的用法。
一个原因是作为一种防止调用者在正常情况下提供参数的方法,但允许内部库代码使用可能依赖于值的功能使用的未记录的内部逻辑。
这是一个非常人为的例子,演示了我上面描述的内容:
function fn (param?: void): void {
if ((param as any) === 'log a special message') {
console.log('Internal behavior matched');
}
};
fn(); // Ok
fn('hello'); // Not ok
/**
* Written as returning void, but actually returns
* something that is used for internal library behavior
*/
function internalFnForInteralThings (): void {
return 'log a special message' as any;
};
fn(internalFnForInteralThings()); // Ok (and logs "Internal behavior matched")
最终,您必须检查导出该类型的项目的整个代码库,以了解它在每种情况下的使用方式,然后利用这些知识,您可以推断出作者选择以这种方式编写签名的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.