Убедитесь, что модификатор доступа является общедоступным, а не закрытым. Я продолжаю эту проблему, и всегда это моя проблема.
public static void main (String [] args)
Они очень различаются по сигнатуре функции, которую они определяют.
T
, причем T
выводится (или указывается явно) при вызове функции. Рассмотрим следующие объявления:
declare const fn: FnWithRequiredParam<number>
declare const genericFn: FnWithParamInferred;
// T was fixed on declaration
fn(1) // ok
fn("1") // err
// T is decded by the caller
genericFn(1) // ok T is number for this call
genericFn("1") // ok T is string for this call
genericFn<number>("1") // err T was specified as number but string was passed in
Причиной ошибки, которую вы получаете, является то, что вы пытаетесь назначить функцию с параметром number
для функции, которая должна принимать параметр любого типа T
, с T
, который должен определять вызывающий функции. Только универсальная функция может соответствовать типу FnWithParamInferred
var f: FnWithParamInferred = <T>(a: T) => { console.log(a) }
Я думаю, что вы действительно хотите, чтобы иметь возможность опустить явный аргумент типа из объявления переменной и сделать его вывод на основе назначенного значения к этому. Typescript не поддерживает это. Если вы определите аннотацию типа для переменной, то для нее не будет никакого вывода.
Вы можете вообще опустить аннотацию типа, чтобы позволить компилятору выводить тип функции:
var f = (a: number) => { console.log(a) } // inferred as (a: number) => void
Или вы можете определить универсальную вспомогательную функцию для вывода T
, но ограничить сигнатуру функции основан на FnWithRequiredParam
function createFunction<T>(fn: FnWithRequiredParam<T>) {
return fn;
}
var f = createFunction((a: number) => { console.log(a) }) // inferred as FnWithRequiredParam<number>