A generic type constraint specifies the minimal contract the type parameters needs to satisfy, but T could be a type that has more required properties than your constraint specifies. This is why typescript generally does not allow asignment of literals to anything with a generic type.
Consider the following code:
type FooType = 'Bar';
class Meow<T extends FooType> {
baz: T = 'Bar';
}
let m = new Meow<'Bar' & { extra: number }>()
m.baz.extra // why is extra not assigned as it's type suggests it should be ?
For string literal types I agree the example above might seem a bit contrived, but it's possible under the type system. I believe there was a suggestion to allow this to work anyway, but I a not sure if it will be implemented.
To get around this check, the simplest solution it to use a type assertion:
class Meow<T extends FooType> {
baz: T = 'Bar' as T;
}