Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查对象是否只包含Typescript中指定的键?_Typescript - Fatal编程技术网

如何检查对象是否只包含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});//错误!
// -------------------------------------------> ~~~
//真的是不可转让的

希望有帮助;祝你好运