Better types for experimental/legacy TypeScript decorators
Typescript 5 made it possible for legacy experimental decorators to check the types of the parameters they are applied
to.
This repository contains helper libraries to enforce the correct types of injected services at compile time, for your
favorite ioc container.
``typescript
import { TypedPropertyDecorator, TypedParameterDecorator } from 'typesafe-decorators';
declare const StringLogger: TypedPropertyDecorator
declare const EnumValidator: TypedPropertyDecorator<'foo' | 'bar' | 'baz', 'set'>
& TypedParameterDecorator<'foo' | 'bar' | 'baz', 'set'>;
class Foo {
@StringLogger // OK
private x1!: 'a' | 'b';
@StringLogger
// ^^^^^^^^^^ Type of property is not assignable to type of decorator
private x2!: number;
@EnumValidator // OK
private x3!: string;
@EnumValidator
// ^^^^^^^^^^^ Type of decorator is not assignable to type of property
private x4!: 'foo' | 'bar';
private foo(
@EnumValidator
p1: string,
@EnumValidator
// ^^^^^^^^^^^ Type of decorator is not assignable to type of parameter
p2: 'foo' | 'bar',
) {}
}
``
* Typesafe Decorators for Inversify
* Typesafe Decorators for NestJS