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 .

贡献者指南

Suggestion: stricter operators · Microsoft/TypeScript#7989 | Good First Issue