【问题标题】:creating a unique keyword in typescript在打字稿中创建一个唯一的关键字
【发布时间】:2014-02-06 05:55:19
【问题描述】:

目标是创建一个与命名类型“number”具有相同语义的新关键字“int”。 我知道我可以通过使用“数字”类型来实现相同的行为,但我被特别要求在 typescript 中实现一个新关键字。我正在为我学校的一个研究项目面试。

一个示例用例如下:

function add(x:int, y:int) {
  return x + y; 
}

我一直在努力实现这个确切的用例。我花了几个小时浏览documentation

我已经通读了类型、类和接口部分,试图弄清楚如何做到这一点;到目前为止没有运气。

我知道我可以使用这样的界面实现类似的功能:

interface int {
   n: number;
}

但我必须实现这样的功能:

function add(x:int, y:int) {
   return x.n + y.n;
}

我对打字稿完全陌生,因此非常感谢任何方向 - 谢谢。

typescriptlang.org上的几个基本示例

【问题讨论】:

  • 如果number具有相同的语义,你为什么不想使用它?
  • 这是个好问题。我学校的一位教授要求我“引入一个新关键字'int',上面的add(x:int,y:int)函数可以在打字稿中编译,并且它应该具有与'number'相同的语义”有可能帮助与他一起完成一个项目。我想他想看看我是否可以实现一个新的 typescript 关键字。
  • 看看以下链接: - [Javascript:关于如何定义新数据类型的一些指导方针?][1] - [Javascript 中是否有用于 Set 数据类型的库? ][2] [1]:stackoverflow.com/questions/15857682/… [2]:stackoverflow.com/questions/2342749/…
  • 那些更特定于 js,这种情况更特定于打字稿语义 - 不过感谢您的帮助。
  • 编译器和解析器都可用/公开,您也许可以以更有意义的方式扩展语言。

标签: javascript typescript keyword


【解决方案1】:

基于这个问题,你的教授意识到了 TypeScript 的局限性。

他特别要求你做一个添加功能。这很重要,因为 TypeScript 不支持运算符的重载(例如 +)。

但是,您可以编写一个接受两个整数并使用一元加法运算符返回一个整数的函数,如下所示。只有函数内部的代码需要了解发生了奇怪的事情。函数之外的所有东西都认为整数存在。

这不会阻止您使用 int 类型传递浮点数。

interface int extends Number {

}

function add(x: int, y: int) : int {
    return +x + +y;
}

var a: int = 1;
var b: int = 2;

var c = add(a, b);

【讨论】:

  • 感谢您的帮助 - 我正在尝试将 int 扩展到 Number,但我不会猜到会使用一元运算符。我是打字稿的新手,我想用不同但有趣的方式来避免 js 模式。
  • 没问题。一元 + 是转换为数字的简写,因此请谨慎使用...var num = +"5"' 可以,但 var num = +"hello"; 有点奇怪:)
【解决方案2】:

根据http://typescript.codeplex.com/workitem/119,可以使用

interface int extends number {}

你也可能对feature: int and float types感兴趣。

【讨论】:

  • 我收到以下错误:无效的“+”表达式 - 不知道支持加法运算符的类型。然后我将 number 更改为 Number ,这是它的父类,但随后我收到以下错误:无效的 '+' 表达式 - 不知道支持加法运算符的类型。不过感谢您的帮助 - 我会继续努力。
猜你喜欢
  • 2016-03-04
  • 1970-01-01
  • 2019-02-08
  • 2014-10-08
  • 1970-01-01
  • 2017-07-02
  • 1970-01-01
  • 1970-01-01
  • 2015-06-29
相关资源
最近更新 更多