TypeScript 为类型的缺失键提供默认值
Posted
技术标签:
【中文标题】TypeScript 为类型的缺失键提供默认值【英文标题】:TypeScript provide default values for missing keys of a Type 【发布时间】:2020-10-07 00:50:31 【问题描述】:可能有一个非常明显的答案,但是如何做到以下几点:
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
基本上是从一个 Type 中检索所有的键,然后循环遍历?
【问题讨论】:
这能回答你的问题吗? Typescript interface default values 【参考方案1】:类型仅在编译时存在,因此您尝试执行的确切操作是不可能的。
一个更简单的选择是这样的
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
)
【讨论】:
【参考方案2】:您无法从类型中获取键作为值,因为类型在运行时不存在。如果 type 很简单,并且所有键的值类型都与示例相同 - 您可以先创建一个键数组,然后从中创建类型:
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
Playground
【讨论】:
以上是关于TypeScript 为类型的缺失键提供默认值的主要内容,如果未能解决你的问题,请参考以下文章
如何为 TypeScript React 应用程序设置键/值默认状态