data icon indicating copy to clipboard operation
data copied to clipboard

Descendants of 'Model' cannot be upcast

Open MathieuCouette opened this issue 7 months ago • 1 comments

Reproduction

  1. Clone https://github.com/MathieuCouette/ember-data-issues
  2. Check out model-upcasting-issue
  3. Run npm install && npm run lint

Description

Implicit upcasting of indirect descendants of Model does not work when the child has an attribute or relationship that the parent does not.

image

Source file: https://github.com/MathieuCouette/ember-data-issues/blob/d2b31433b1212b03879288990b763f9299c33e34/app/components/product.ts

Argument of type 'PaymentMethodCcModel' is not assignable to parameter of type 'PaymentMethodModel'.
  Types of property 'eachAttribute' are incompatible.
    Type '<T>(callback: (this: NoInfer<T> | undefined, key: "last4" | "obfuscatedIdentifier", meta: LegacyAttributeField) => void, binding?: T | undefined) => void' is not assignable to type '<T>(callback: (this: NoInfer<T> | undefined, key: never, meta: LegacyAttributeField) => void, binding?: T | undefined) => void'.
      Types of parameters 'callback' and 'callback' are incompatible.
        Types of parameters 'key' and 'key' are incompatible.
          Type 'string' is not assignable to type 'never'.
            Type 'string' is not assignable to type 'never'.

I am guessing that the cause is the same as #9405.

Versions

├── @babel/[email protected]
├── @ember-data-types/[email protected]
├── @ember-data-types/[email protected]
├── @ember-data-types/[email protected]
├── @ember-data-types/[email protected]
├── @ember-data-types/[email protected]
├── @ember-data-types/[email protected]
├── @ember-data-types/[email protected]
├── @ember-data-types/[email protected]
├── @ember-data-types/[email protected]
├── @ember-data-types/[email protected]
├── @ember/[email protected]
├── @ember/[email protected]
├── @ember/[email protected]
├── @glimmer/[email protected]
├── @glimmer/[email protected]
├── @glint/[email protected]
├── @glint/[email protected]
├── @tsconfig/[email protected]
├── @types/[email protected]
├── @types/[email protected]
├── @typescript-eslint/[email protected]
├── @typescript-eslint/[email protected]
├── @warp-drive-types/[email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
└── [email protected]

MathieuCouette avatar Jul 17 '24 22:07 MathieuCouette