我有一个函数定义为:
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;
}
当然,我希望它可以与任何类型一起使用。
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;
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;
}
useSubmitHandler(Router.route('fees.store')!, store.data as {[property: string]: any})
TypeScript GitHub问题请提供json
基本类型#1897
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句