6

I have been initializing some constant classes as

    export class A {
       foo: string,
       b: B
    }

    export class B { 
       bar: number
    }

And then importing them into another class and initializing them in another file. However, if I have issues using class B when I want to initialize class A.

Example:

    import { A, B } from '../models/class';
    export const myVariable: A = {
       foo: 'FOO',
       b: B = {
          bar: 5
       }
    }

the first assignment is correct. However, the B class inside A will give me the error - Cannot assign to 'B' because it is an import.

2
  • You forgot } at the end Commented Oct 5, 2021 at 17:35
  • Do A and B have to be classes? If you only need them for their types, it'd make much more sense to make them interfaces and you make b: {...} as B. Commented Oct 5, 2021 at 17:37

1 Answer 1

12

This isn't how you assign a value to a property in an object literal:

{
  foo: 'FOO',
  b: B = {
    bar: 5
  }
}

Basically you're trying to assign an object to B itself instead of to the b property on your object, and then trying to assign the result of that assignment to the b property. Which doesn't really make sense.

You're probably getting confused over the usages of the : character. When declaring a variable in TypeScript, it's used to indicate the type. When defining an object literal in JavaScript (and therefore also TypeScript), it's used to define a value for an object's property.

This is how you define an object literal:

{
  foo: 'FOO',
  b: {
    bar: 5
  }
}
Sign up to request clarification or add additional context in comments.

1 Comment

thanksfor the clarification

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.