chore: Add utility mapped type for Java-like enforcement of method parameter… #2212
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Add Java-like type checking of method parameter types when implementing an interface, and when defining a callback.
Usage of strict interface implementation: class MyClass implements strictly<MyClass, MyInterface> { ... }
Results: shows readable compiler errors in IDE and compiler if the method signatures do not match exactly.
/**
Checks that the implementation of an interface has
the public methods defined in the interface with the exactly same
parameter types as the interface.
@param C - the class that implements the interface
@param I - the interface
@returns - an interface that is otherwise the same as I, but the methods
whose parameters do not match between C and I are marked with a type that
causes a compiler error when used in combination with the 'implements' keyword.
@example ts class MyClass implements strictly<MyClass, MyInterface> { ... }
*/
Usage of strictly typed callbacks:
/**
ts fetchValue<C>(callback: strictCb<C, (result: string) => void>): void { callback('some value') }
*/