typescript - 可选参数的映射类型
问题描述
interface Foo{
one: string;
two?: number;
someFunc: (args: string|number) => string
}
所以,我正在寻找的是一种声明“args”类型的方法;
我想知道是否有办法指定 args 的类型。参数“二”是可选的。如果用户指定参数“二”,我希望 someFunc 将参数作为数字和字符串,否则除了使用联合类型之外,还有其他方法吗?
谢谢。
解决方案
您可以使用联合而不是接口。一个联合成员将two
需要一个 if 类型编号,并具有适当的类型 for args
,联合的另一个成员将具有two
可选的 和 类型never
,以确保其与另一个联合成员不兼容。您将对参数类型进行推理,但编译器将验证该函数是否具有适当的参数类型。
type Foo = {
one: string;
two?: never;
someFunc: (args: number) => string
} | {
one: string;
two: number;
someFunc: (args: string) => string
}
let foo: Foo = {
one: '',
someFunc : (a: string) => a
} // err
let foo2: Foo = {
one: '',
someFunc : (a: number) => a.toString()
} // ok
let foo3: Foo = {
one: '',
two:2,
someFunc : (a: string) => a
} // ok
let foo4: Foo = {
one: '',
two:3
someFunc : (a: number) => a.toString()
} // err
推荐阅读
- php - CodeIgniter: Trying to load the option values from database table based on the selection of first select option
- javascript - 如何反转数组中存在的每个字符串元素?
- php - 在 Wordpress 插件中,为什么在激活钩子中调用时 `register_rest_route()` 不起作用?
- python - 如何将是或否更改为二进制分类?
- graphics - Using 2D metaballs to draw an outline with a constant thickness
- java - 为大文件有效地将 XML 转换为 JSON
- vim - 在其他行 vim 的末尾放置选择的抽出的行
- objective-c - 使用 MapKit,MKMapview 如何通过在屏幕上垂直对齐两个坐标来定位地图
- kafka-python - 如何使用 ssl 配置创建 Kafka-python 生产者
- python - 为 pandas 数据框的每个 id 替换列中序列的缺失值