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 类型

如何为 TypeScript React 应用程序设置键/值默认状态

有没有办法将类型声明中特定键的值用作同一声明中另一个键的类型(在 Typescript 中)?

区分Protobuf 3中缺失值和默认值

TypeScript 映射类型键/值

Typescript:如何声明一种值等于对象键的数组类型?