【问题标题】:Why does TypeScript use "type annotations" instead of keywords like other strongly-typed languages?为什么 TypeScript 使用“类型注释”而不是像其他强类型语言那样的关键字?
【发布时间】:2016-09-05 12:31:33
【问题描述】:

TypeScript 的类型系统使用 类型注解,如下所示:

private currentState: IAppState;

我把它读作“currentState 是一个 IAppState”

为什么这种语法比我习惯的其他强类型语言更具有设计意义?

private IAppState currentState;

我知道 TypeScript 应该是 JavaScript 语法的扩展,但在这种情况下,是什么让 TypeScript 的设计者选择了当前的语法:

private IAppState: currentState;

【问题讨论】:

  • 我不知道,但由于类型不是强制性的,请考虑:function fn(value1: MyType1, value2: MyType2)function fn(MyType1 value1, MyType2 value2),现在如果我决定删除其中一种类型:function fn(value1: MyType1, value2)function fn(MyType1 value1, value2)。后者看起来有点奇怪,与打字稿中的情况相反。此外,某些语言在 typescript 之前就有这种语法,例如ActionScript
  • 还有其他强类型语言似乎也影响了打字稿。 OCaml 和 Haskell 可能是两种最著名的强类型函数式语言,它们都有这种语法(尽管 haskell 使用两个冒号)
  • 这个团队在这里很活跃,所以他们中的一个可能会通过你的帖子来提供背景,他们会更有能力谈论它,我只想说肯定有先例。
  • 另外,这是 ECMAScript 4 使用的语法(由 ActionScript 3 实现,但从未由 JavaScript 实现),所以如果 TypeScript 团队不认为这是可遵循的设计先例,我会感到惊讶。

标签: syntax typescript strong-typing


【解决方案1】:

我和一个朋友正在讨论这个问题,他举了一个很好的例子:

type student_detail = {
  id: number,
  name: string,
  percentage: number,
  clg_data: {
    college_id: number,
    college_name: string
  }
}

这几乎看起来像标准的 JS。现在想象一下 C 风格的语法会是什么样子:

struct student_detail {
    number id;
    string name;
    number percentage;
    // structure within structure
    struct {
        number college_id;
        string college_name;
    } clg_data;
}

当涉及到结构中的结构时,真正做到这一点的唯一方法是将它们拆分为单独的结构:

struct student_college_detail {
    number college_id;
    string college_name;
};
struct student_detail {
    number id;
    string name;
    number percentage;
    struct student_college_detail clg_data;
}

这很好,但并不真正适合 JavaScript。这可能是他们坚持使用var: type 语法的原因。如果你能做到这一点也许会很好。 :)

【讨论】:

    猜你喜欢
    • 2010-09-12
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    相关资源
    最近更新 更多