使用TypeScript向现有类型添加属性

时间:2017-06-15 01:55:45

标签: node.js typescript typescript2.0

所以我有一个用TypeScript编写的库,它使用NPM依赖性'ldapjs'。

我的项目中也安装了@types/ldapjs

所以在我的项目中,我有这个:

import {Client} from '@types/ldapjs';
import * as ldap from 'ldapjs';

现在我的问题是 - 如何向Client类型的客户端添加属性?

我有这个:

export interface IClient extends Client{
  __inactiveTimeout: Timer,
  returnToPool: Function,
  ldapPoolRemoved?: boolean
}

其中IClient是我的ldapjs客户端版本,具有一些额外的属性。

let client = ldap.createClient(this.connOpts);  // => Client
client.cdtClientId = this.clientId++;

但问题是,如果我尝试向客户端添加属性,我会收到此错误:

  客户端类型

'cdtClientId'属性不存在。

我可以通过某种方式将客户端转换为IClient吗?

我该怎么做?我在许多不同的项目中遇到同样的问题。

2 个答案:

答案 0 :(得分:1)

虽然您添加的答案可能会解决您的问题,但您可以直接扩充Client界面并添加属性。你甚至不需要IClient。您可以使用module augmentation

declare module "ldapjs" {
    interface Client {
        // Your additional properties here
    }
}

答案 1 :(得分:0)

哇,这不是那么难,我一直想知道如何做好几个月。

 let client = ldap.createClient(this.connOpts) as IClient;

我们使用as表示法将泛型类型转换为更具体的类型(我认为这是放置它的正确方法)。

我通过这篇文章解决了这个问题: http://acdcjunior.github.io/typescript-cast-object-to-other-type-or-instanceof.html