You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/2-features/18-typescript.md
+14-12Lines changed: 14 additions & 12 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -29,31 +29,33 @@ This command scans your marked classes, generates the corresponding TypeScript d
29
29
30
30
Tempest provides several built-in type resolvers for common types: strings, numbers, dates, enums and class references.
31
31
32
-
You can add your own resolver by providing implementations of {b`Tempest\Generation\TypeScript\TypeResolvers\TypeResolver`}. This interface requires a `canResolve()` method to determine if the resolver can handle a given type, and a `resolve()` method to perform the actual resolution.
32
+
You can add your own resolver by implementing {b`Tempest\Generation\TypeScript\TypeResolver`}. This interface requires a `canResolve()` method to determine if the resolver can handle a given type, and a `resolve()` method that returns a type node.
33
33
34
-
The following is the actual implementation of the built-in resolver that handles scalar types:
34
+
The following is the actual implementation of the built-in resolver that handles enum cases:
35
35
36
-
```phpScalarTypeResolver.php
36
+
```phpEnumCaseTypeResolver.php
37
37
#[Priority(Priority::LOW)]
38
-
final class ScalarTypeResolver implements TypeResolver
38
+
final class EnumCaseTypeResolver implements TypeResolver
39
39
{
40
40
public function canResolve(TypeReflector $type): bool
public function resolve(TypeReflector $type, TypeScriptGenerator $generator): ResolvedType
45
+
public function resolve(TypeReflector $type, TypeScriptGenerator $generator): TypeNode
47
46
{
48
-
return new ResolvedType(match ($type->getName()) {
49
-
'string' => 'string',
50
-
'int', 'float' => 'number',
51
-
'bool' => 'boolean',
52
-
});
47
+
$case = $type->asEnumCase()->getValue();
48
+
$value = $case instanceof BackedEnum
49
+
? $case->value
50
+
: $case->name;
51
+
52
+
return new LiteralTypeNode($value);
53
53
}
54
54
}
55
55
```
56
56
57
+
Resolvers may return any supported semantic node depending on your use case, such as {b`Tempest\Generation\TypeScript\TypeNodes\PrimitiveTypeNode`}, {b`Tempest\Generation\TypeScript\TypeNodes\LiteralTypeNode`}, {b`Tempest\Generation\TypeScript\TypeNodes\SymbolTypeNode`}, {b`Tempest\Generation\TypeScript\TypeNodes\ArrayTypeNode`}, {b`Tempest\Generation\TypeScript\TypeNodes\UnionTypeNode`}, {b`Tempest\Generation\TypeScript\TypeNodes\IntersectionTypeNode`}, {b`Tempest\Generation\TypeScript\TypeNodes\ObjectTypeNode`} or {b`Tempest\Generation\TypeScript\TypeNodes\RawTypeNode`}.
58
+
57
59
:::info
58
60
Type resolvers are automatically [discovered](../1-essentials/05-discovery.md) and do not need to be registered manually.
0 commit comments