10 ms·
I don't follow how this parameter works then in Record: const taskCounts = { work: 10, home: 5, personal: 3 }; const what : Record<string, number> = taskC
by planede 3y ago
I don't follow how this parameter works then in Record:
const taskCounts = { work: 10, home: 5, personal: 3 };
const what : Record<string, number> = taskCounts; // OK, covariance?
const the : Record<"work" | "home", number> = taskCounts; // Also OK, contravariance?
const hell : Record<"work" | "home" | "personal" | "hello", number> = taskCounts; // This is an error
https://www.typescriptlang.org/play?#code/MYewdgzgLgBFCGEDWBhEBXMUIwLwwG8YB3EAJyQC4YBGABgBoYALEAWwFNqBWJgBw5kI4eABtqAZhgBfANwAoeaEixizeLGoAlDqDIATADzQyASzABzJmHRsARoIB8eOIlQYsEWTAD0PmKAAbvBm8GDAHAD8SuDQcMwcMNq65EYARKQUaTAAPjBprJxp1rYOZM74CMhomNjefgHgUGTwwaHhUTEqLByiokkwOnrpmUjZeQXsHOP5AkIiojMFvaIgxTA29k4uVe61XkA https://www.typescriptlang.org/play?#code/MYewdgzgLgBFCGEDWB...
- headbee 3y agoI think you were originally correct and that `Record<string, number>` was not a good example. I would guess that union literals and primitives are handled differently by the compiler in this case, perhaps because a record with keys of every possible string is impossible it may have a special condition to skip some typing rules. In fact, `Record<number, number>` is assignable to `Record<string, number>`.