TypeScript为类型的缺少键提供默认值

TypeScript为类型的缺少键提供默认值,typescript,Typescript,可能有一个非常明显的答案,但如何做到以下几点: 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) &&am

可能有一个非常明显的答案,但如何做到以下几点:

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 }
类型testStatus={
foo:布尔;
条形图:布尔型;
baz:布尔型;
}
const makeDefaults=(o:Partial)=>{
const keys=//testStatus键的数组?
forEach(k=>!(k in o)和&(o[k]=false))//为缺少的键提供默认值
返回o
}
常量obj:Partial={foo:true,bar:false}
const defaultedObj=makeDefaults(obj)/{foo:true,bar:false,baz:false}

基本上是从一个类型中检索所有键,以循环使用?

类型只在编译时存在,因此您尝试执行的确切操作是不可能的

一个更简单的选择是

类型TestStatus={
foo:布尔;
条形图:布尔型;
baz:布尔型;
}
常量defaultTestStatus:TestStatus={
傅:错,
酒吧:错,
巴兹:错
}
const merge=(partialStatus:Partial):TestStatus=>({
…默认测试状态,
…部分状态
})

无法从类型中获取键作为值,因为运行时类型不存在。如果类型很简单,并且其所有键的值类型都与示例中相同-可以先创建键数组,然后从中创建类型:

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
}
const key=['foo','bar','baz']作为const;
类型testStatus={[K in typeof key[number]]:boolean};
const makeDefaults=(o:Partial)=>{
KEYS.forEach(k=>!(k in o)和&(o[k]=false))
返回o
}

这是否回答了您的问题?