可能有一个非常明显的答案,但如何做到以下几点:
type testStatus = {
foo: boolean;
bar: boolean;
baz: boolean;
}
const makeDefaults = (o: Partial<testStatus>) => {
const keys = // array of `testStatus` keys?
keys.forEach(k => !(k in o) && (o[k] = false)) // provide a default value for missing keys
return o
}
const obj: Partial<testStatus> = { foo: true, bar: false }
const defaultedObj = makeDefaults(obj) // { foo: true, bar: false, baz: false }
基本上是从一个类型中检索所有键,以循环通过?
无法从类型中获取键作为值,因为运行时类型不存在。如果类型很简单,并且其所有键的值类型都与示例中相同-可以先创建键数组,然后从中创建类型:
const KEYS = ['foo', 'bar', 'baz'] as const;
type testStatus = { [K in typeof KEYS[number]]: boolean };
const makeDefaults = (o: Partial<testStatus>) => {
KEYS.forEach(k => !(k in o) && (o[k] = false))
return o
}
游戏场
类型只在编译时存在,因此您尝试执行的确切操作是不可能的。
一个更简单的选择是
type TestStatus = {
foo: boolean;
bar: boolean;
baz: boolean;
}
const defaultTestStatus: TestStatus = {
foo: false,
bar: false,
baz: false
}
const merge = (partialStatus: Partial<TestStatus>): TestStatus => ({
...defaultTestStatus,
...partialStatus
})
问题内容: 在Swift中处理可选选项的习惯用法似乎过于冗长,如果您只想在nil为零的情况下提供默认值,则它是: 涉及不必要地复制代码,或 这不需要是常数。 Scala的Option monad(与Swift的Optional基本相同)具有用于此目的的方法: 我想念什么吗?Swift已经有一种紧凑的方式做到这一点吗?否则,是否可以在扩展名中为Optional 定义? 问题答案: 更新资料 苹果现在
为我在原始问题中提出的错误代码示例道歉。我试图把我的问题简单化,但结果却相当令人困惑。 我稍微修改了一下代码: 我得到了第一个错误: 所以我把最后一行改为: 然后在Orelse上弹出一个新的错误: Optional>类型中的方法orElse(Capture#4-of?extends Map.Entry)不适用于参数(AbstractMap.SimpleEntry) 我最初的问题是,我不知道如何为这
我使用的是Json。net将对象序列化到数据库。 我向类中添加了一个新属性(该属性在数据库的json中缺失),我希望新属性在json中缺失时具有默认值。 我尝试了DefaultValue属性,但它不起作用。我正在使用私有setter和构造函数来反序列化json,因此在构造函数中设置属性的值将不起作用,因为有一个带有该值的参数。 以下是一个例子: 我预计年龄是5岁,但现在是零岁。 有什么建议吗?
我正在用TypeScript设置一个web应用程序,我似乎缺少了一些我需要的基本类型。 编译()时,会出现以下错误, 错误TS2304:找不到名称“TouchEvent”。 错误TS2304:找不到名称“MouseEvent”。 错误TS2304:找不到名称“PointerEvent”。
我有一个Spring启动应用程序,它定义了: 写入kafka主题的REST控制器,STREAM_TOPIC_IN_QQQ 一个从STREAM_TOPIC_IN_QQQ(group pId="bar")和日志读取的KafkaListener 查看主题并记录的KStream,将其转换为另一种类型,然后将其写入STREAM_TOPIC_OUT_QQQ 另一个从STREAM_TOPIC_OUT_QQQ读取
我有以下定义: 伊鲁特: IRoutesConfig: 以及我的路由配置,然后将其传递给类以进一步增强 我正在测试登录功能组件: 这是一个新的项目设置,还没有为登录道具定义任何内容。因此,它当前为空,稍后将进行扩展,内容也是如此,因为我们目前正在设置routes体系结构。 VSCode在中的"组件"上给了我以下提示: 我当然不是声明类型、道具和钥匙。 最后,路由配置将被提供给RouteManage