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