Я объявил функцию:
_translate(value: T, callback: (name: T) => T): void;
И функция:
public _translate(value: T, callback: T) {
if (!this.translate) {
callback(value);
}
}
Как это называть (использовать)? Я попробовал следующее:
this._translate(value, function(data: T) {
console.info(data);
});
Это не работает
Вам нужно включить больше кода, если вы хотите получить хороший ответ. Пожалуйста, посмотрите, что представляет собой минимальный воспроизводимый пример.
Не зная больше, похоже, что ваш параметр callback должен быть функцией, которая принимает ввод типа T и возвращает вывод типа T. Но используемая вами функция ничего не возвращает; он просто регистрируется в консоли. Таким образом, либо ваше объявление неверно (должно быть (name: T)=>void), либо ваша функция неверна (должна заканчиваться на return data;). Это предположения, основанные на ваших фрагментах кода. Более точный ответ может быть получен, если вы предоставите дополнительную информацию.
Хорошо, см. Фрагмент здесь: goo.gl/zqThvj






Попробуй это:
// parameters:
// value, instance of T.
// callback: function, accepting parameter (name) that is instance of T and returns object that is instance of T.
// returns: Void.
public _translate(value: T, callback: (name:T) => T): void {
}
а затем назвать это:
this._translate(value, (data: T): T => {
return {};
});
Но что тут не так: public _translate(value: T, callback: T) { if (!this.translate) { callback(value); }
На линии: callback(value); ?
В вашем случае я получаю :any, не относящийся к типу T
Попробуй. Прошло много времени с момента написания TS.
Не работает, кажется я ошибся в _translate(value: T, callback: T);
Приведенный выше код не является допустимым TypeScript. Я думаю, вам может потребоваться попробовать что-то в компиляторе TypeScript (вот один), если вы собираетесь предлагать код
Я прошу прощения. Я только что отредактировал код. Он должен быть действителен сейчас.
Проблема в строке: this._translate(value, (data: T): T => {... Сообщение об ошибке: функция должна возвращать значение
У вас есть инструкция return внутри функции? Должен ли обратный вызов что-то возвращать? Так вы это написали.
Никакая функция не возвращает, но есть обратный вызов: посмотрите: public _translate(value: T, callback: (name: T) => T): void {}
Вы ничего не возвращаете в своей функции обратного вызова, и вы не пытаетесь использовать результат своей функции обратного вызова от вызывающей стороны ... так что это выглядит, как будто вы должны изменить объявление _translate на
_translate(value: T, callback: (name: T) => void): void;
Это означает, что параметр callback должен быть функцией, которая принимает входные данные типа T и ничего не возвращает (void). Затем вам нужно изменить сигнатуру реализации, чтобы она соответствовала:
public _translate(value: T, callback: (name: T) => void): void {
if (!this.translate) {
callback(value);
}
}
и тогда вы сможете вызвать _translate() как метод для экземпляра вашего класса, например:
// class with _translate() method is MapperServiceArray<T>
const thingy = new MapperServiceArray<string>();
// call _translate on the object with a string and a callback that
// takes a string and does not return a value
thingy._translate("something", x => console.info(x.charAt(0)));
Теперь, когда я вижу ваш фрагмент кода, я могу предлагать изменения, который заставит его скомпилировать (вроде), но я действительно не знаю, что вы пытаетесь сделать. Надеюсь, это немного помогло. Удачи.
И как это назвать?
Вы говорите, что объявляете функцию, где? Должен быть определен как
public _translate(value: T, callback: (name: T) => T) { .. }