dialog icon indicating copy to clipboard operation
dialog copied to clipboard

Support typing the model with a generic type argument on the open method

Open davidlav opened this issue 4 years ago • 2 comments

I'm submitting a feature request

  • Language: TypeScript

Current behavior: There is not an easy way to enforce type consistency in the data model passed through the open function and where it is consumed in the dialog view model's activate and canActivate functions.

  • What is the expected behavior? Add a generic type parameter to open for typing the model (currently the model is simply of type any). For example:
dialogService.open<Customer>({
  viewModel: Dialog,
  model: {
    // TypeScript compiler would throw an error if this object wasn't of type Customer
    ...
  • What is the motivation / use case for changing the behavior? The consuming dialog view model would still need to manually type the model, as one currently would, but at least there would be a little more security on the other end knowing that what's being passed in is actually of type Customer.
export class Dialog implements DialogComponentActivate<Customer> {
  activate(model:Customer) {
    ...

davidlav avatar Apr 20 '20 16:04 davidlav

Any suggestions/PRs how those can be coupled are welcomed.

In the case where viewModel is passed as string(moduleId) I doubt, something could be done. On another note, there are 4 interfaces currently, DialogComponentActivate, ... that can be used on the VM.

There is a similar problem how to propagate the dialog "output" type from the VM through the service.

StrahilKazlachev avatar Apr 20 '20 17:04 StrahilKazlachev

Typescript now provides ways to get the types of function parameters: https://www.typescriptlang.org/docs/handbook/utility-types.html#parameterstype Given this functionality I assume this request would be possible.

m-gallesio avatar Jun 11 '21 15:06 m-gallesio