Writing MetadataOptions.properties.type function and object as ts types
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 213
- Forks
- 35
- Avg merge
- 37m
- Merged PRs (30d)
- 1
Description
Currently, when defining properties of type function or object, only these type unsafe definitions are accepted.
The ability to define more specific types would greatly improve the quality and readability of the code.
I have 2 ideas in my mind how this could be achieved.
The first would be a more type guess based aproach like the following:
static readonly metadata: MetadataOptions = {
properties: {
someFunc: {
type: "(button: sap.m.Button) => void"
}
}
};
// the .gen.d.ts would look like this:
import { $ControlSettings } from "sap/ui/core/Control";
import Button from "sap/m/Button";
declare module "./Example" {
interface $ExampleSettings extends $ControlSettings {
callback?: (button: Button) => void
}
// ... //
}
The idea is to define them as type-safe TS types and convert them to the simple type with the transformation to js.
In the case of the example, the metadata would be rewritten to type: "function".
Alternatively, if guessing the type would be too difficult, since some object types can be very complex, enhancing the property with an additional key could make it easier and enable the useage of interfaces and named types:
static readonly metadata: MetadataOptions = {
properties: {
someFunc: {
tsType: "(button: sap.m.Button) => void",
type: "function"
}
}
};
This 2nd approach would also .
Here the tsType would be used for the gen.d.ts file and removed in the js transformation as it's not needed anymore.
It's not often that i need to use these property types but when I do, it's follow by unnessecary assertion of types.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reviewing the MetadataOptions property definitions and the transformation that produces JavaScript and .gen.d.ts files. Compare the proposed type-guessing and tsType approaches, then determine how specific function and object types should be represented in generated declarations while remaining simple at runtime. Done means the chosen approach is defined and supported consistently.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- tooling
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100