【问题标题】:Explicit last function parameter in TypeScriptTypeScript 中的显式最后一个函数参数
【发布时间】:2018-02-18 16:55:40
【问题描述】:

使用 TypeScript 2.7.2 及更高版本,是否可以使用动态参数声明函数,最后一个参数是显式/强制类型?

我正在尝试为使用带有动态参数的函数的 JavaScript 库编写环境 TypeScript 声明,同时期望最后一个参数始终是特定的回调函数。

【问题讨论】:

  • (...args: any[], lastArg: any) ?你知道,有实际的类型等等。
  • @MikeMcCaughan 这会给你error TS1014: A rest parameter must be last in a parameter list.
  • 这很奇怪,我可以发誓我以前用过它......

标签: typescript


【解决方案1】:

动态解决方案是不可能的。你需要声明尽可能多的你认为有用的重载。

declare function foo(p1: any, cb: () => void): void;
declare function foo(p1: any, p2: any, cb: () => void): void;
declare function foo(p1: any, p2: any, p3: any, cb: () => void): void;
// ...
declare function foo(...args: any[]): void;

【讨论】:

  • 我是否愚蠢地希望最新的 TypeScript 是从这种愚蠢中进化而来的?高级脚本语言就这么多:)
  • 嗯,在 JS 中的 rest 参数之后也不可能有一个额外的命名参数。我猜 TypeScript 开发人员决定不要离实际的 JS 太远。有一个针对variadic types 的建议,如果它成功了,也许它可以为您的问题提供更优雅的解决方案。类似foo<...T>(...args: [...T, () => void])
猜你喜欢
  • 1970-01-01
  • 2017-11-24
  • 2011-09-25
  • 2018-05-10
  • 2021-12-20
  • 1970-01-01
  • 2023-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多