Skip to content

Commit 1dbd0ef

Browse files
committed
Add strict types for EnhancedResource.name
1 parent 39d6a79 commit 1dbd0ef

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

src/common/resource.dto.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { LazyGetter as Once } from 'lazy-get-decorator';
44
import { DateTime } from 'luxon';
55
import { keys as keysOf } from 'ts-transformer-keys';
66
import { inspect } from 'util';
7+
import type { ResourceMap } from '~/core';
78
import { $, abstractType, e } from '~/core/edgedb/reexports';
89
import { ScopedRole } from '../components/authorization';
910
import { CalculatedSymbol } from './calculated.decorator';
@@ -128,8 +129,8 @@ export class EnhancedResource<T extends ResourceShape<any>> {
128129
: undefined;
129130
}
130131

131-
get name() {
132-
return this.type.name;
132+
get name(): ResourceName<T> {
133+
return this.type.name as any;
133134
}
134135

135136
/**
@@ -282,6 +283,15 @@ export const isResourceClass = <T>(
282283
): cls is ResourceShape<T> =>
283284
'Props' in cls && Array.isArray(cls.Props) && cls.Props.length > 0;
284285

286+
export type ResourceName<TResourceStatic extends ResourceShape<any>> = {
287+
[Name in keyof ResourceMap]: ResourceMap[Name] extends TResourceStatic // Only self or subclasses
288+
? TResourceStatic extends ResourceMap[Name] // Exclude subclasses
289+
? Name
290+
: never
291+
: never;
292+
}[keyof ResourceMap] &
293+
string;
294+
285295
export type MaybeUnsecuredInstance<TResourceStatic extends ResourceShape<any>> =
286296
MaybeSecured<InstanceType<TResourceStatic>>;
287297

0 commit comments

Comments
 (0)