如何检查对象是否只包含Typescript中指定的键?
让我们看看我们有一个字符串的并集:如何检查对象是否只包含Typescript中指定的键?,typescript,Typescript,让我们看看我们有一个字符串的并集: type PossibleKeys = 'foo' | 'bar' 我们需要一种类型来检查对象是否包含除上述键以外的其他键: type ValidObject = { [key in PossibleKeys]: any } 这可以工作,但它也接受其他键,并且需要所有键,可以通过将其标记为可选的?来解决,但仍然接受其他键 我想接受的是: {foo: true, bar: true} {foo: true} {bar: true} {} 不接受: {foo
type PossibleKeys = 'foo' | 'bar'
我们需要一种类型来检查对象是否包含除上述键以外的其他键:
type ValidObject = { [key in PossibleKeys]: any }
这可以工作,但它也接受其他键,并且需要所有键,可以通过将其标记为可选的?
来解决,但仍然接受其他键
我想接受的是:
{foo: true, bar: true}
{foo: true}
{bar: true}
{}
不接受:
{foo: true, bar: true, baz: true}
基本上,接受示例中没有的任何其他内容
这可能吗?这本质上是一个重复的问题。将此问题的答案转换为以下解决方案:
type PossibleKeys = 'foo' | 'bar'
type Exactly<T, U> = T & Record<Exclude<keyof U, keyof T>, never>;
const asValidObject =
<T extends Exactly<Partial<Record<PossibleKeys, any>>, T>>(t: T) => t;
const a = asValidObject({ foo: true, bar: true }); // okay
const b = asValidObject({ foo: true }); // okay
const c = asValidObject({ bar: true }); // okay
const d = asValidObject({}); // okay
const e = asValidObject({ foo: true, bar: true, baz: true }); // error!
// -------------------------------------------> ~~~
// true is not assignable to never
type PossibleKeys='foo'|'bar'
类型=T&Record;
常量asValidObject=
(t:t)=>t;
常量a=asValidObject({foo:true,bar:true});//可以
常量b=asValidObject({foo:true});//可以
常量c=asValidObject({bar:true});//可以
常量d=asValidObject({});//可以
const e=asValidObject({foo:true,bar:true,baz:true});//错误!
// -------------------------------------------> ~~~
//真的是不可转让的
希望有帮助;祝你好运