Currently operators like "+" are defined such that they match their semantics in JS. The below are all allowed by the compiler and produce the shown values, even with --strictNullChecks on.
2 + 'a' => "2a"
null + 'a' => "nulla" (!)
2 - null => 2
I propose letting users opt in (maybe via some --strictOperators) to strict operator behavior. Concretely I think this means:
-
restrict +, and += to just number and string, e.g. for the former only declare
function +(a: number, b: number): number;
function +(a: string, b: string): string;
-
restrict - and -= to just number
(any should continue to work as normal, of course.)
Relevant spec section:
https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md#419-binary-operators
See also "Expression operators" in the strictNullTypes change: #7140
and in particular this rationale: #7140 (comment)
This would fall under of "stricter" TypeScript, #274 .
Currently operators like "+" are defined such that they match their semantics in JS. The below are all allowed by the compiler and produce the shown values, even with
--strictNullCheckson.2 + 'a'=>"2a"null + 'a'=>"nulla"(!)2 - null=>2I propose letting users opt in (maybe via some
--strictOperators) to strict operator behavior. Concretely I think this means:restrict
+, and+=to justnumberandstring, e.g. for the former only declarerestrict
-and-=to justnumber(
anyshould continue to work as normal, of course.)Relevant spec section:
https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md#419-binary-operators
See also "Expression operators" in the
strictNullTypeschange: #7140and in particular this rationale: #7140 (comment)
This would fall under of "stricter" TypeScript, #274 .