【问题标题】:How to write type definition (typescript) for getter/setter如何为 getter/setter 编写类型定义(打字稿)
【发布时间】:2017-09-26 18:05:57
【问题描述】:

如何为类似这样的 javascript 代码编写类型定义文件 (d.ts)

library.js:

Object.defineProperty( SceneNode.prototype, 'name', {
    set: function(name)
    {
        this.setName( name );
    },
    get: function(){
        return this._name;
    },
    enumerable: true
});

到目前为止:

library.d.ts

class SceneNode{
    private _name: string;
}

但是如何将 getter/setter 包含到类型定义中?

编辑 1:

为澄清添加了文件名

【问题讨论】:

  • 是打算使用setter/getter还是可以做两个函数getName()setName()
  • 我试图为其编写 d.ts 文件的库是用 getters/setter 以这种格式编写的: Object.defineProperty( SceneNode.prototype, 'name', {
  • @Mouneer 为什么当 JS 允许真正的属性访问器时?
  • @evolutionxbox,我喜欢直言不讳。
  • 好的,我想这就够了declare class SceneNode { name: string; }

标签: javascript typescript definitelytyped


【解决方案1】:

您只需定义类型,就好像它是一个简单的属性。 getter 和 setter 的目的是让它看起来好像只是一个简单的属性,而实际上某些代码正在运行,但它不会从类型视图更改接口。

所以你只需要:

class SceneNode{
    private _name: string;
    public name: string;
}

【讨论】:

  • 只有一个后续问题:我需要私有和公共定义还是公开就足够了?对象本身同时具有_namename
  • 我会同时包含两者,因为这样可以更准确地描述对象。如果您正在定义一个接口,那么您将没有私有成员,但对于您应该拥有的类。但这只是意见:省略私人成员可能不会破坏任何东西。
猜你喜欢
  • 2018-06-26
  • 2016-04-07
  • 1970-01-01
  • 2018-08-24
  • 1970-01-01
  • 2017-03-17
  • 2019-12-25
  • 2019-04-20
  • 2017-04-13
相关资源
最近更新 更多