Why doesn't the following example generate a TypeScript compiler warning (instead failing at runtime) when I try to work on
let foo: Promise<string> = Promise.resolve(10); // should not compile
foo.then(v => v.toUpperCase());
// -> TypeError: v.toUpperCase is not a function
This appears to be a known issue (also see #10524, which is the main tracking issue for this problem) and should be fixed in v2.1.2 by the linked commit. You should be able to upgrade and the types will then be enforced properly, as intended.
If the issue persists in v2.1.x, my suggestion would be to report a bug in their issue tracker.