如何在Typescript

时间:2019-07-30 14:16:21

标签: c# typescript

我们使用ClearScript扩展我们的应用程序。我们使用ClearScript的AddHostType和AddHostObject方法将各种C#对象公开到JavaScript中。

最近,我们开始在我们的Google Apps脚本项目中使用Typescript,并认为也可以使用它来管理我们的ClearScript脚本。

这被证明是一个有趣的经历。我们知道诸如external.d.ts之类的东西,并且已经开始编写一个代码来处理我们从C#端注入的各种符号。

我们已经能够解决某些问题。例如,在这段代码中

function SchTasks(instruction:string) {
  var proc = CSProcess.Start("C:\\Windows\\System32\\schtasks.exe", instruction);
  return proc;
}

此声明似乎有效

declare namespace CSProcess {
  function Start(a:string, b:string): any;
}

同样,带有此方块

that.getMyIP = function () {
  var request = new CSRestRequest();
  request.AddParameter("user", username);
  request.AddParameter("pass", password);
  request.AddParameter("command", "getmyip");
  var response = client.Execute(request);
  return response.Content.trim();
};

此声明似乎有效

declare class CSRestRequest {
    constructor (str?:any) ;
    AddParameter(a:string, b:string) : any;
}

目前困扰我们的是如何声明以下内容。该符号称为CSSettings,它是Dictionary<string,object>的一个实例,因此它有一些挂起它的方法,例如.ContainsKey。声明此的最佳方法是什么?它无法new进行编辑,因此它不是带有构造函数的类,但是它确实具有类似类的方法。

var taskName = "\XChecker\M_XChecker_" + (function () {
    if (CSSettings.ContainsKey("/TEST")) {
      return "TEST";
    }
    if (CSSettings.ContainsKey("/PRODUCTION")) {
      return "PRODUCTION";
    }
    return "UNKNOWN";
  }
    ()) + "_" + CSSettings("/TASKRULESETGROUPLUTFKS") + "_" + CSSettings("/INSTANCENUMBER") + "_" + CSSettings("/INSTANCECOLUMN");

LATER

以下内容似乎起作用。奇怪的是,VSCode没有报告符号名称冲突。 CSSetting真的可以同时成为函数和名称空间吗?显然是的。

declare function CSSettings(s:string):any;
declare namespace CSSettings {
  function ContainsKey(s:string):boolean;
}

1 个答案:

答案 0 :(得分:1)

声明您的字典类。然后使用这种类型的变量CSSettings

declare class IDictionary {
  constructor();
  public ContainsKey(key: string): boolean;
}

declare const CSSettings: IDictionary;

CSSettings.ContainsKey('key');

//编辑

那么要创建2种类型并将其合并呢?这样您就可以将CSSettings用作函数甚至用作对象

declare type functionType = (key: string) => boolean;
declare const CSSettings: functionType & { ContainsKey: (key: string) => boolean };
CSSettings.prototype.ContainsKey = 1;


CSSettings('key');
CSSettings.ContainsKey('key');