2017-02-14 2 views
0

Когда я компилирую следующий код (который мне кажется неправильным, потому что тип const и тип функции () различны) никаких ошибок не производятся:Как определить тип массива Машинопись параметров функции

export const yearsExtractor: (Period) => Year[] = (periods: Period[]): Year[] => periods && periods.length ? periods.map((period: Period) => period.year) : <Year[]>[]; 

Когда я компилирую следующий код (который мне кажется правильным, потому что тип const и тип матча функция ()) производится ошибка:

export const yearsExtractor: (Period[]) => Year[] = (periods: Period[]): Year[] => periods && periods.length ? periods.map((period: Period) => period.year) : <Year[]>[]; 

разница в том, что код, который не компилируется, объявляет const как функцию, которая принимает массив из Period объектов (в отличие от одного объекта Period).

ошибка

(Period[]) =>

нет ошибки

(Period) =>

+1

У вас всегда есть обязательное имя до оптимального типа аннотаций. Поэтому Period является именем параметра в этой позиции, а [] недопустим в этой позиции ... – Lucero

ответ

1

в первую очередь:

(Period) => Year[] 

читает как функцию с параметром Period:any, второй экземпляр:

(Period[]) => Year[]... 

является неверным синтаксисом, потому что вы не дали имя для переменной функции (вам нужно).

попробовать (period: Period[]) => Year[]...

export const yearsExtractor: (period: Period[]) => Year[] = (periods: Period[]): Year[] => periods && periods.length ? periods.map((period: Period) => period.year) : <Year[]>[]; 
Смежные вопросы