Microsoft/TypeScript

Suggestion: stricter operators

Open

#7,989 建立於 2016年4月10日

在 GitHub 查看
 (14 留言) (15 反應) (0 負責人)TypeScript (48,455 star) (6,726 fork)batch import
Effort: ModerateHelp WantedSuggestion

描述

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: https://github.com/Microsoft/TypeScript/pull/7140 and in particular this rationale: https://github.com/Microsoft/TypeScript/pull/7140#issuecomment-186432250

This would fall under of "stricter" TypeScript, https://github.com/Microsoft/TypeScript/issues/274 .

貢獻者指南