typescript - 使最后一个参数有条件地可选打字稿
问题描述
我想让函数的最后一个参数有条件地是可选的,例如。如果前一个参数的类型为 null,则将最后一个参数设为可选 ( ?
),如果前一个参数有值,则将最后一个参数设为必需。
这可能吗?
解决方案
您可以使用休息元组的联合来给您这种行为:
const func = (...param: [null, unknown?] | [unknown, unknown]) => {};
func("a", "b"); // okay
func("a"); // error! Type 'string' is not assignable to type 'null'.
func(null); // okay
func(null, "b"); // okay
或者,您可以使用传统的(TS3.0 之前的)解决方案,重载:
const func: {
(param1: null, param2?: unknown): void; // first call signature
(param1: unknown, param2: unknown): void; // second call signature
} = (param1: unknown, param2?: unknown) => {};
func("a", "b"); // okay
func("a"); // error! Type '"a"' is not assignable to parameter of type 'null'.
func(null); // okay
func(null, "b"); // okay
其中任何一个都应该适合你。希望有帮助;祝你好运!
推荐阅读
- node.js - 谷歌云功能 - Firestore 查询快照大小返回未定义
- java - 客户端只能在同一台计算机上连接到服务器
- java - Ract-Native Android 构建失败 - 无法找到请求目标的有效认证路径
- javascript - 如何将对象包装在代理中以进行调试?
- python - 在 python 中捕获特定错误
- ios - 覆盖“shouldPerformSegueWithIdentifier”函数抛出错误
- .net - 尽管使用了 XDocument,但 XML 中的字符无效
- javascript - 为什么我的代码在没有 .remove() 的情况下删除对象
- android - 如何调整文本对齐到文本视图的两个角
- gradle - Gradle Release Plugin:如何将版本保存在文本文件(而不是属性文件)中?