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
}
这是否回答了您的问题?