RequiredProp
This commit is contained in:
		
							parent
							
								
									7105b4db18
								
							
						
					
					
						commit
						7469390011
					
				|  | @ -116,10 +116,10 @@ export type Obj = Record<string, Schema>; | |||
| // https://github.com/misskey-dev/misskey/issues/8535
 | ||||
| // To avoid excessive stack depth error,
 | ||||
| // deceive TypeScript with UnionToIntersection (or more precisely, `infer` expression within it).
 | ||||
| export type ObjType<s extends Obj, RequiredProps extends ReadonlyArray<keyof s>> = | ||||
| export type ObjType<s extends Obj, RequiredProp extends keyof s> = | ||||
| 	UnionToIntersection< | ||||
| 		{ -readonly [R in RequiredPropertyNames<s>]-?: SchemaType<s[R]> } & | ||||
| 		{ -readonly [R in RequiredProps[number]]-?: SchemaType<s[R]> } & | ||||
| 		{ -readonly [R in RequiredProp]-?: SchemaType<s[R]> } & | ||||
| 		{ -readonly [P in keyof s]?: SchemaType<s[P]> } | ||||
| 	>; | ||||
| 
 | ||||
|  | @ -137,16 +137,16 @@ type PartialIntersection<T> = Partial<UnionToIntersection<T>>; | |||
| // To get union, we use `Foo extends any ? Hoge<Foo> : never`
 | ||||
| type UnionSchemaType<a extends readonly any[], X extends Schema = a[number]> = X extends any ? SchemaType<X> : never; | ||||
| //type UnionObjectSchemaType<a extends readonly any[], X extends Schema = a[number]> = X extends any ? ObjectSchemaType<X> : never;
 | ||||
| type UnionObjType<s extends Obj, a extends readonly any[], X extends ReadonlyArray<keyof s> = a[number]> = X extends any ? ObjType<s, X> : never; | ||||
| type UnionObjType<s extends Obj, a extends readonly any[], X extends ReadonlyArray<keyof s> = a[number]> = X extends any ? ObjType<s, X[number]> : never; | ||||
| type ArrayUnion<T> = T extends any ? Array<T> : never; | ||||
| 
 | ||||
| type ObjectSchemaTypeDef<p extends Schema> = | ||||
| 	p['ref'] extends keyof typeof refs ? Packed<p['ref']> : | ||||
| 	p['properties'] extends NonNullable<Obj> ? | ||||
| 		p['anyOf'] extends ReadonlyArray<Schema> ? p['anyOf'][number]['required'] extends ReadonlyArray<keyof p['properties']> ? | ||||
| 			UnionObjType<p['properties'], NonNullable<p['anyOf'][number]['required']>> & ObjType<p['properties'], NonNullable<p['required']>> | ||||
| 			UnionObjType<p['properties'], NonNullable<p['anyOf'][number]['required']>> & ObjType<p['properties'], NonNullable<p['required']>[number]> | ||||
| 			: never | ||||
| 			: ObjType<p['properties'], NonNullable<p['required']>> | ||||
| 			: ObjType<p['properties'], NonNullable<p['required']>[number]> | ||||
| 	: | ||||
| 	p['anyOf'] extends ReadonlyArray<Schema> ? never : // see CONTRIBUTING.md
 | ||||
| 	p['allOf'] extends ReadonlyArray<Schema> ? UnionToIntersection<UnionSchemaType<p['allOf']>> : | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue