Как определить элементы, которые будут игнорироваться в Typescript

У меня есть приложение, которое использует Клирскрипт для добавления JavaScript в качестве языка расширения. Я начал использовать Typescript в других проектах и ​​подумал, что буду использовать его и в Вот этот.

Моя проблема в том, что я выставил довольно много объектов/методов/свойств С# в среду JavaScript. Помимо вставки

// 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 — это символ, импортированный в среду JavaScript со стороны C# с использованием

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

(RestRequest — это символ, предоставленный RestSharp.)

Итак, как мне объявить Typescript, что CSRestRequest — это внешний символ, который new используется для создания объекта RestSharp RestRequest?

объявить соответствующие глобальные переменные как any ?

Titian Cernicova-Dragomir 30.07.2019 10:01
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
212
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы пытались использовать файлы .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 и разрешить тип.

Это победитель! Спасибо.

bugmagnet 30.07.2019 11:04

Обычно машинописный текст использует объявления, чтобы сообщить компилятору об объектах, существующих в среде выполнения, но не созданных в машинописном тексте. В зависимости от уровня безопасности типов, который вы хотите, вы можете просто объявить внешний объект как 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();
};

Последняя форма - это то, к чему я только что добрался. Спасибо.

bugmagnet 30.07.2019 11:05

Другие вопросы по теме

Дважды используя угловой шаблон, и при обновлении данных, связанных с одним, он также обновляет другой
Что делать, если вы не можете динамически изменить класс объекта?
Как отсортировать список объектов, полученный из базы огня?
Как я могу преобразовать данные из DocumentSnapshot в пользовательский тип с помощью функций Google Cloud, чтобы я мог воспользоваться преимуществами автозаполнения?
Как проверить тип файла .js, который использует Moment, с помощью TypeScript?
Как сжать изображение Base64/Binary в Angular6?
Angular Material: как установить каждый значок степпера с матовым горизонтальным степпером с другим цветом фона в TS
Как я могу получить доступ к библиотеке через скрипт в приложении Typescript React?
Что означает знак равенства внутри угловых скобок параметра типа
Как отображать несколько значений одного и того же атрибута при наведении курсора на всплывающую подсказку с помощью highcharts/highmaps