pkl icon indicating copy to clipboard operation
pkl copied to clipboard

🐛`fixed` properties not respected by `toTyped()`

Open thomaspurchas opened this issue 1 year ago • 3 comments

The toTyped API doesn't respect fixed properties on classes, resulting in the following unexpected outcome:

class Bird {
  fixed type = "Parrot"
  name = "Polly"
}

untypedBird {
  type = "Cocker spaniel"
  name = "Morris"
}

result = untypedBird.toTyped(Bird)

produces

untypedBird {
  type = "Cocker spaniel"
  name = "Morris"
}
result {
  type = "Cocker spaniel"
  name = "Morris"
}

thomaspurchas avatar Jul 08 '24 20:07 thomaspurchas

I don't think It's particular to fixed properties. I have the same kind of problem but with "normal" properties :

class A{
  x:Int
  y = x + 1
}

a = Map("x", 1).toTyped(A)

produces the following error :

Tried to read property `x` but its value is undefined.

Which is understandable since :

class A{
  x:Int = 0
  y = x + 1
}

a = Map("x", 1).toTyped(A)

produces :

{
  "a": {
    "x": 1,
    "y": 1
  }
}

If I'm missing something or if there is a way around it I'm interested :)

hmonfleur avatar Jul 10 '24 14:07 hmonfleur

The point @thomaspurchas is making - I believe - is that he expected type to be "Parrot". What isn't being respected here, is that toTyped ignores the fixed-ness of the property.

holzensp avatar Jul 18 '24 12:07 holzensp

Ok, maybe I wrongly made a link between my problem and the one that @thomaspurchas raised. Still there's a behavior that is not the one I would have expected when using toTyped , i.e., it does not produce the same object as normal instantiation would have. I have found some partial workaround using let to force evaluation at some points (I mean I think that's what it does) but it does not entirely solve the problem (in my case for instanciation of objects contained in attributes and produced by the instanciation of an object that are not instanciated when using toTyped resulting in empty attributes). Maybe I can sum that up and open a new issue about it.

hmonfleur avatar Jul 23 '24 10:07 hmonfleur