Difference in `key` typing between `Effect.Service` and `Context.Tag` in Effect Typescript library

Is there any reason for
key
in class extending from Context.Tag being typed as
string
instead of as const string like in Effect.Service ?

export class MyServiceEffect
  extends Effect.Service<MyServiceEffect>()('MyServiceEffect', {
    succeed: { a: 'value' },
  })
{}

// MyServiceEffect.key is of type 'MyServiceEffect'
export const MyServiceEffectKey: 'MyServiceEffect' = MyServiceEffect.key

export class MyService extends Context.Tag('MyService')<
  MyService,
  { a: 'value' }
>() {}

// Error: Type 'string' is not assignable to type '"MyService"'
export const MyServiceKey: 'MyService' = MyService.key
Was this page helpful?