Showing posts from October, 2018

The TypeScript "extends" Keyword Doesn't Extend Types

I was looking through the built in TypeScript definition file "lib.es5.d.ts" and found the definition "Pick".
//From T pick a set of properties K type Pick<T, K extends keyof T> = {     [P in K]: T[P]; };
In more words: Pick<T,K> is a new type of object whose keys are the set K, which has to be a subset of the keys in T.
But when I tried to understand what it was from the code itself, I had some trouble, and the source of that trouble is simply the extends keyword. We usually use 'A extends B' to mean A has all the keys in B and maybe some more, which the English also suggests. But in reality K must be a subset of T's keys.
What is going on?
What is a Type? A type is a set of values based on some rule. e.g. Colour = { red orange yellow ... }
If A is a subtype of B, values that match A are a subset of values that match B. The definition of the subtype therefore has to be a narrower version of the supertype.
So one subtype of Colour could be Traff…