This is a supplementing proposal to go with my constraint types proposal: #13257, but it also could be very powerful for working with the typeof proposal in #6606.
In that proposal, there is the ability to dispatch type based on value is Whatever, and it would be useful to also generically pass bindings (not just raw types).
Proposal
// Declaration
interface Foo<expr value> {}
type Foo<expr value> = ...
// Declaration with constraints
interface Foo<expr value is Bar> {}
type Foo<expr value is Bar> = ...
// Usage
const foo: Foo<foo>;
declare function bar(item: any): Foo<item>
interface Bar { self: Foo<this>; }
- In declarations, you simply prefix
expr to make it a value-level binding rather than a type.
- You may constrain these with the same
value is T syntax currently available in return values.
- Using them is as simple as passing a variable name as a parameter.
- Any
typeof operand supported is also supported here as a generic parameter.
this is a valid binding.
This is a supplementing proposal to go with my constraint types proposal: #13257, but it also could be very powerful for working with the
typeofproposal in #6606.In that proposal, there is the ability to dispatch type based on
value is Whatever, and it would be useful to also generically pass bindings (not just raw types).Proposal
exprto make it a value-level binding rather than a type.value is Tsyntax currently available in return values.typeofoperand supported is also supported here as a generic parameter.thisis a valid binding.