typescript - 打字稿。定义函数对象的类型
问题描述
沙盒来了
我有一个具有不同功能的对象
const objectOfFunctions = {
getFromNumber: (arg: number) => arg,
getFromString: (arg: string) => arg,
getFromBoolean: (arg: boolean) => arg
};
我需要为数据定义类型
const data: DataTypes = [
{
type: 'getFromNumber',
arg: 1
},
{
type: 'getFromNumber',
arg: 10
},
{
type: 'getFromString',
arg: 'qwerty'
},
{
type: 'getFromBoolean',
arg: true
}
];
我的类型是:
type TypeOfObject = typeof objectOfFunctions;
type ObjectKeys = keyof TypeOfObject;
interface ObjectType<T extends ObjectKeys> {
type: T
arg: Parameters<TypeOfObject[T]>[0];
}
type DataTypes = (
ObjectType<'getFromNumber'> |
ObjectType<'getFromString'> |
ObjectType<'getFromBoolean'>
)[]
为数组的每个元素执行所需的功能。
data.forEach((dataItem) => {
const func = objectOfFunctions[dataItem.type];
const {arg} = dataItem;
func(arg)
})
typesctipt 抛出错误:
TS2345: Argument of type 'string | number | boolean' is not assignable to parameter of type 'never'.
Type 'string' is not assignable to type 'never'.
const func = objectOfFunctions[dataItem.type];
const {arg} = dataItem;
> func(arg)
^^^
})
如何正确定义 DataTypes 的类型?
提前致谢 :)
解决方案
推荐阅读
- c - 结构 2d 数组 segm 故障 C
- c# - 循环密码
- python-3.x - 试图调用一个类,但不断收到消息说“位置不接受任何参数
- html - 我的单选按钮一直显示为文本框?
- python - 通过直方图绘制数据
- qtwebengine - 来自子帧的 qt.webChannelTransport
- python - 从命名元组列表中写入 numpy.array()
- webpack - 您如何从 Spoonx 获取 aurelia-api 插件以使用当前不使用 coreBundles.aurelia 的 webpack 配置
- php - 使用 PHP 和正则表达式选择非分隔逗号
- amazon-web-services - Cloudfront CloudFormation