-
Notifications
You must be signed in to change notification settings - Fork 12.9k
Closed
Labels
Design LimitationConstraints of the existing architecture prevent this from being fixedConstraints of the existing architecture prevent this from being fixed
Description
Code
interface BV {
A: string,
B: number,
}
type BVTemplate<K extends keyof BV> = {
[P in K]?: BV[P];
}
abstract class BaseBlock<T extends keyof BV> {
abstract readonly typeName: T;
value: BVTemplate<T>;
update(v: BV[T]) {
const updated: BVTemplate<T> = {
[this.typeName]: v,
}
// const updated: BVTemplate<T> = {};
// updated[this.typeName] = v;
this.value = updated;
}
}
Expected behavior:
typeName
is T
, but the type is incompatible with BVTemplate because the object literal declaration stores it as string
. string
is not compatible to T
.
Actual behavior:
I would hope this example could work. The commented string works perfectly, and in JS land those two things should be equivalent.
Metadata
Metadata
Assignees
Labels
Design LimitationConstraints of the existing architecture prevent this from being fixedConstraints of the existing architecture prevent this from being fixed