当前位置: 首页 > 知识库问答 >
问题:

如何在typescript中扩展基元类型?

南门棋
2023-03-14

我想创建如下界面:

interface Show {
  show(): string;
}

function doit(s: Show) {
  return 'Showed: ' + s.show();
}

然后我们可以将它用于一个新类:

class Foo {
  s: string;
  constructor(s: string) { 
    this.s = s; 
  }
  show() {
    return 'Foo with "' + this.s + '"';
  }
}

console.log(doit(new Foo('hello')));

我想对Numbers做同样的事情。在纯JavaScript中,我可以使类型Number,例如,满足以下接口:

Number.prototype.show = function() { 
  return '' + this; 
}

但TypeScript不允许我这样做:

show.ts(18,18): error TS2094: The property 'show' does not exist on value of type 'Number'.

有办法做到这一点吗?

共有1个答案

澹台锐
2023-03-14

只需通过添加到Number,告诉TypeScript:

interface Number{
    show():string;
}

Number.prototype.show = function() { 
  return '' + this; 
}

var foo = 123;
foo.show();

请注意,即使支持严格的it,即使在JavaScript领域这样做也被认为是不好的做法:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Inheritance_and_the_prototype_chain#Bad_practice.3A_Extension_of_native_prototypes

 类似资料:
  • 假设我有两种我正在跟踪的数字,比如和。我想用基本的原语来表示这些变量,但不允许在typescript中将赋值给变量。 有没有办法对原语进行子分类,以便typescript检测到该赋值是非法的?以某种方式强制名义键入,使此代码失败? “如何在typescript中扩展基元类型”的答案看起来这会让我走上正确的方向,但我不确定如何扩展该解决方案,为不同类型的数字创建不同的命名子类型。 我必须包装基元吗?

  • 所以我学会了如何在打字稿中进行扩展: 但是如何从中制作一个吸气剂?例如: 所以我可以在代码someArray.lastIndex中调用is作为getter? 我找到了这个答案,但代码无法为泛型类型编译,这样写也很丑陋,但也许我在打字稿中要求太多:如何使用 get 属性扩展打字稿类?

  • 我在挣扎。 当扩展一个类时,我可以很容易地向它添加一些新属性。 但是,当我扩展基类时,如果我想向基类的对象(简单对象的属性)添加新属性,该怎么办? 下面是一个带有一些代码的示例。 基类 派生类 现在,正如您可以从行内注释中看到的,这将激怒TypeScript。但这在JavaScript中工作。那么,实现这一目标的正确方法是什么呢?如果没有,问题是在我的代码模式本身吗?什么模式适合这个问题? 也许您

  • 问题内容: 我有一个基类,我想在服务中进行扩展以帮助将数据输入角度范围。我已经在网上搜索了一种解决方案,但是没有找到我喜欢的解决方案。我有一个用于访问设备文件系统的基类 类结构: 我希望能够在几个不同的角度服务(即offlineCart,offlineCustomLists等)中扩展该类,其中每个服务都将能够使用存储库来存储各种不同的数据类型。我正在寻找最好,最合适的方式来做到这一点。在普通Jav

  • 这是我现在面临的问题。我有一个类,假设 ,这个类定义了一个名为 的方法,该方法返回一个 实例。类 在 内部定义,并被声明为。我想做的是定义一个扩展的类,但我也我自己的功能(方法,属性等)来扩展。我也希望返回。 问题是< code>Bar是最终的。下面是我想做的一个例子: 我想做的是: 我怎样才能做到这一点? [编辑]我正在为我的问题添加更多详细信息。我实际上正在为 Jenkins 开发一个插件,搜

  • 问题内容: 我正在将React.js与TypeScript一起使用。有什么方法可以创建从其他组件继承但具有一些其他道具/状态的React组件? 我想要达到的目标是这样的: 但是,如果我把这个会失败中,我得到一个错误的打字稿(类型的参数是不能分配给类型)。我想这不是TypeScript专用的东西,而是将继承与泛型(?)混合使用的一般限制。是否有任何类型安全的解决方法? 更新 我选择的解决方案(基于D