如何定义JSON兼容参数以避免错误“缺少索引签名”?

我有一个函数定义为:

export function useSubmitHandler(url: string, data: Json): [FormEventHandler<HTMLFormElement>, boolean] {}

在哪里Json

type JsonPrimitive = string | number | boolean | null | undefined
interface JsonMap extends Record<string, JsonPrimitive | JsonArray | JsonMap> {}
interface JsonArray extends Array<JsonPrimitive | JsonArray | JsonMap> {}
export type Json = JsonPrimitive | JsonMap | JsonArray

但是,如果尝试使用任意接口调用它,则会收到错误消息:

TS2345: Argument of type 'Fee' is not assignable to parameter of type 'Json'.   
Type 'Fee' is not assignable to type 'JsonMap'.     
Index signature is missing in type 'Fee'

在此处输入图片说明

但是,如果我用相同的对象来调用它,但是像这样传播,{...store.data}那么错误就会消失。

如何useSubmitHandler正确键入,以便它将接受可JSON字符串化的任何对象?

我认为Json类型是正确的,但是还需要更多的东西来允许将任意类型传递给函数。


Fee 是:

interface Fee {
    id: number|null;
    name: string;
    type: string;
    amount: string;
    default: number;
    company_id: number;
    deleted_at?: any;
    active: number;
    fee_or_discount: string;
}

当然,我希望它可以与任何类型一起使用。

克里斯托弗·佩塞雷(Christopher Peiseret)

选项1:重新定义Json类型

type JsonPrimitive = string | number | boolean | null;
type JsonMap = {
    [key: string]: JsonPrimitive | JsonMap | JsonArray;
}
type JsonArray = Array<JsonPrimitive | JsonMap | JsonArray>;
type Json = JsonPrimitive | JsonMap | JsonArray;

选项2:将索引签名添加到Fee接口

interface Fee {
    [property: string]: any;
    id: number|null;
    name: string;
    type: string;
    amount: string;
    default: number;
    company_id: number;
    deleted_at?: any;
    active: number;
    fee_or_discount: string;
}

选项3:为索引签名添加内联类型断言,例如:

useSubmitHandler(Router.route('fees.store')!, store.data as {[property: string]: any})

也可以看看

TypeScript GitHub问题请提供json基本类型#1897

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在 Swagger 中处理非必需参数以避免丢失位置参数错误?

来自分类Dev

如何修复函数以避免错误日志(未定义偏移量:2 in ..)-爆炸

来自分类Dev

传递null作为默认参数以避免使用参数

来自分类Dev

传递null作为默认参数以避免使用参数

来自分类Dev

spring for mongodb转义参数以避免SQL注入

来自分类Dev

spring for mongodb转义参数以避免SQL注入

来自分类Dev

如何解决“类型中缺少索引签名”错误?

来自分类Dev

如何制作针对自己的JS函数以避免冲突

来自分类Dev

如何正确配置foreach循环以避免索引超出范围错误?

来自分类Dev

Flight Framework如何避免未定义的索引错误

来自分类Dev

jQuery Ajax调用-传递多个参数以避免名称依赖

来自分类Dev

使用java8的lambda作为方法参数以避免冗余

来自分类Dev

从JPEG转换图片时要指定哪些cwebp参数以避免质量下降?

来自分类Dev

额外的类型参数可以避免无效的覆盖错误?

来自分类Dev

使用 std::enable_if 重载函数以避免模板替换错误

来自分类Dev

如何在函数中包装函数以避免代码重复

来自分类Dev

如何在使用php的登录系统中使用随机数以避免重播攻击?

来自分类Dev

如何停止使用 onload() 函数以避免在页面刷新时丢失 PHP 输出?

来自分类Dev

如何更改此掩码 javascript 函数以避免从零开始?

来自分类Dev

如何编写宏以避免重新定义?

来自分类Dev

如何生成自定义 JSESSIONID 以避免冲突

来自分类Dev

如何解决错误:(4, 1) TS2349:无法调用类型缺少调用签名的表达式。类型“typeof moment”没有兼容的调用签名

来自分类Dev

如何编写有问题的代码以避免出现错误?

来自分类Dev

如何在 Haskell 中调整“tail”以避免错误缩进

来自分类Dev

填写缺少的条件,以避免表中出现“超出界限”错误

来自分类Dev

处理数组以避免错误

来自分类Dev

GPG错误缺少签名

来自分类Dev

后期绑定以避免“用户定义的类型未定义”错误

来自分类Dev

类型中缺少索引签名

Related 相关文章

  1. 1

    如何在 Swagger 中处理非必需参数以避免丢失位置参数错误?

  2. 2

    如何修复函数以避免错误日志(未定义偏移量:2 in ..)-爆炸

  3. 3

    传递null作为默认参数以避免使用参数

  4. 4

    传递null作为默认参数以避免使用参数

  5. 5

    spring for mongodb转义参数以避免SQL注入

  6. 6

    spring for mongodb转义参数以避免SQL注入

  7. 7

    如何解决“类型中缺少索引签名”错误?

  8. 8

    如何制作针对自己的JS函数以避免冲突

  9. 9

    如何正确配置foreach循环以避免索引超出范围错误?

  10. 10

    Flight Framework如何避免未定义的索引错误

  11. 11

    jQuery Ajax调用-传递多个参数以避免名称依赖

  12. 12

    使用java8的lambda作为方法参数以避免冗余

  13. 13

    从JPEG转换图片时要指定哪些cwebp参数以避免质量下降?

  14. 14

    额外的类型参数可以避免无效的覆盖错误?

  15. 15

    使用 std::enable_if 重载函数以避免模板替换错误

  16. 16

    如何在函数中包装函数以避免代码重复

  17. 17

    如何在使用php的登录系统中使用随机数以避免重播攻击?

  18. 18

    如何停止使用 onload() 函数以避免在页面刷新时丢失 PHP 输出?

  19. 19

    如何更改此掩码 javascript 函数以避免从零开始?

  20. 20

    如何编写宏以避免重新定义?

  21. 21

    如何生成自定义 JSESSIONID 以避免冲突

  22. 22

    如何解决错误:(4, 1) TS2349:无法调用类型缺少调用签名的表达式。类型“typeof moment”没有兼容的调用签名

  23. 23

    如何编写有问题的代码以避免出现错误?

  24. 24

    如何在 Haskell 中调整“tail”以避免错误缩进

  25. 25

    填写缺少的条件,以避免表中出现“超出界限”错误

  26. 26

    处理数组以避免错误

  27. 27

    GPG错误缺少签名

  28. 28

    后期绑定以避免“用户定义的类型未定义”错误

  29. 29

    类型中缺少索引签名

热门标签

归档