- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有一个函数:
export default ({
input: { name, onChange, value, ...restInput },
meta,
...rest
}) => (
...
);
鉴于“name”是一个字符串,“onChange”是一个函数,“value”是一个字符串,“meta”是一个对象,我如何为这些参数添加类型?我最好的猜测是这样的:
export default ({
input: { (name: String), (onChange: function), (value: String), ...restInput },
(meta: Object),
...rest
}) => (
...
);
但是好像有语法错误。甚至我不知道如何向剩余参数添加类型。
最佳答案
要向解构参数添加类型声明,您需要声明包含对象 的类型。
... Confusingly, the colon here does not indicate the type. The type, if you specify it, still needs to be written after the entire destructuring...
let { a, b }: { a: string, b: number } = o;
关于深度嵌套解构的 PSA:
Use destructuring with care. As the previous example demonstrates, anything but the simplest destructuring expression is confusing. This is especially true with deeply nested destructuring, which gets really hard to understand even without piling on renaming, default values, and type annotations. Try to keep destructuring expressions small and simple. You can always write the assignments that destructuring would generate yourself.
在函数中,这是为解构参数声明类型的方式:
export default ({ a, b }: {a: string, b: number}) => (
...
);
虽然在更长的示例中这看起来很糟糕:
export default ({
input: { name, onChange, value, ...restInput },
meta,
...rest
}: {
input: {
name: string, onChange: ()=>void, value:string, ...restInput
}, meta: object
}) => (
...
);
看起来很糟糕,所以你在这里能做的最好的事情就是为你的参数声明一个接口(interface)并使用它而不是内联类型:
interface Params {
input: {
name: string;
onChange: ()=>void;
value: string;
};
meta: object;
}
export default ({
input: { name, onChange, value, ...restInput },
meta,
...rest
}: Params) => {};
对于其余参数,根据您对这些类型的期望,您可以使用 index signature :
interface Params {
// This needs to match the other declared keys and values
[key: string]: object;
input: {
[key: string]: string | (() => void);
name: string;
onChange: ()=>void;
value: string;
};
meta: object;
}
export default ({
input: { name, onChange, value, ...restInput },
meta,
...rest
}: Params) => { };
这会给 ...rest
一个 {[key: string]: object}
的类型。
关于javascript - 在 TypeScript 中使用解构和剩余类型的函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53329592/
我正在运行一个带有 while 约束的 SQL 查询,其中包含一些“id”。例如: SELECT table.id FROM TableOne table WHERE table.id IN (1,
我正在寻找在替换其中一个元素后打印元素列表的最正确方法。我可以按如下方式做,但显然很困惑。 #!/usr/bin/python import sys file = open(sys.argv[1])
这个问题在这里已经有了答案: How wide is the default `` margin? (4 个答案) How do I remove the top margin in a web
当我尝试使用命令安装 rvm 时::(I am Using UBUNTU 12.04 LTS) curl -L https://get.rvm.io | bash -s 当我尝试与简单用户相同的命令时
我使用 GOPro 工作人员 6 个月前发送给我的命令,通过终端(在 Gopro 网络上)使用 Gopro Hero3 拍摄照片/视频。有效。但是,在过去的一个月里,我一直在尝试再次执行此操作,并且不
尽管知道我不应该关闭应用程序按钮,但我仍然这样做。完成所有 Activity 后,我调用 finish() 方法,它们调用析构函数和所有内容。用户的行为也是正确的。但我想知道为什么还有 5 个打开的线
当我在 Rest Controller 中的类级别启用 @Validated spring 注释时,会生成 2 个验证上下文(每个验证上下文都有不同的前缀)。 @Validated 注释是必需的,因为
在旧的 API 中,剩余的允许容量显然作为 X-Ratelimit-Remaining 返回HTTP header 。 然而,current version's documentation对此一无所获
我一直在使用 Service Fabric 一段时间,成功构建、部署和测试了多个服务,但我刚刚完成构建的服务在部署时失败(请参阅下面的错误)。在诊断中,我尝试使用 VS 模板(没有代码更改)创建和部署
这个问题在这里已经有了答案: 关闭 12 年前。 Possible Duplicate: Progress unit in ProgressDialog 如何覆盖进度条进度消息,即 61/100 到
我正在用 Objective-C (Cocoa) 编写命令行实用程序的前端。我需要解析输出以检查不同类型的消息。有两种基本类型;信息消息和下载状态消息。信息消息始终以以下内容之一开头:INFO:、WA
我是一名优秀的程序员,十分优秀!