【问题标题】:How to define items to be ignored in Typescript如何在 Typescript 中定义要忽略的项目
【发布时间】:2019-07-30 06:15:54
【问题描述】:

我有一个应用程序,它使用ClearScript 添加 JavaScript 作为扩展语言。我已经开始在其他项目中使用 Typescript,并认为我也会在 this one 中使用它。

我的问题是我在 JavaScript 环境中暴露了相当多的 C# 对象/方法/属性。除了插入

// ts-ignore

在每个实例之上,有没有办法告诉 Typescript 某些符号是“已知的”?

如果能够具体说明这些函数的输入和输出,那就太好了,这样 TS 可以在我没有正确使用它们时通知我。

如何声明外部符号?

例如,在这个切片中定义出一个对象

  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();
  };

CSRestRequest 是从 C# 端导入到 JavaScript 环境的符号,使用

 jSE.AddHostType("CSRestRequest", typeof(RestRequest)); 

RestRequest 是 RestSharp 提供的符号。)

那么我如何向 Typescript 声明 CSRestRequest 是一个外部符号,由 news 生成一个 RestSharp RestRequest 对象?

【问题讨论】:

  • 将各自的全局变量声明为any?

标签: javascript typescript clearscript


【解决方案1】:

您是否尝试过使用 .d.ts 文件?这些文件包含类型定义并被 ts 编译器用于类型检查。

您可以在这里找到信息:https://www.typescriptlang.org/docs/handbook/declaration-files/introduction.html

例如,您可以创建 external.d.ts 文件并添加如下内容:

declare class CSRestRequest {
    // constructor(/* args */);

    // method(): void;
}

那么 ts 编译器应该选择 external.d.ts 文件并解析类型。

【讨论】:

  • 那是赢家!谢谢。
【解决方案2】:

通常 typescript 使用声明来让编译器知道存在于运行时环境中但不是在 typescript 中创建的对象。根据您希望的类型安全级别,您可以将外部对象声明为 any 或更具体的类型。

使用any

declare const CSRestRequest: any;
declare const client: any;
function getIp(username: string, password: string) {
  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 {
  AddParameter(name: string, value: any): void;
};
declare const client: {
  Execute(req: CSRestRequest): {
    Content: string
  }
};
function getIp(username: string, password: string) {
  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();
};

【讨论】:

  • 后一种形式是我刚刚得到的。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-29
  • 2017-02-12
  • 2016-06-03
  • 2015-12-18
  • 2017-07-17
  • 1970-01-01
  • 2013-03-30
相关资源
最近更新 更多