get Some (): Todo [] {} - Это какой-то вид Shorthand Technique? - PullRequest
0 голосов
/ 22 октября 2019

В учебнике об услугах на Angular я нашел фрагмент кода.

getTodos(): Todo[] {
  return [
    { name: "Todo 1", status: TodoStatus.BUG },
    { name: "Todo 2", status: TodoStatus.TODO },
    { name: "Todo 3", status: TodoStatus.IN_REVIEW },
  ]
}

Автор пишет, что это метод, который возвращает начальные элементы списка. На левой стороне двоеточия находится название метода. Я не понимаю, что происходит на правой стороне. Какова роль Todo [], который является пустым массивом? Каково значение []{}? Может ли кто-нибудь объяснить это мне? Спасибо.

Ответы [ 2 ]

2 голосов
/ 22 октября 2019

: Todo[] является аннотацией машинописного текста (интерфейс, тип) и объявляет тип возвращаемого значения для метода getTodos() так же, как и другие языки программирования, ориентированные на тип (C #, Java и т. Д.).

InВаш конкретный пример означает, что ваш метод может возвращать массив объектов типа Todo.

Типы не обязательны, поэтому ваш код будет работать так же, не объявляя тип возвращаемого значения для метода.

getTodos() {
  return [
    { name: "Todo 1", status: TodoStatus.BUG },
    { name: "Todo 2", status: TodoStatus.TODO },
    { name: "Todo 3", status: TodoStatus.IN_REVIEW },
  ]
}
0 голосов
/ 22 октября 2019

давайте посмотрим только на первую строку.

getTodos(): Todo[] {

Она объявляет функцию с именем getTodos и что она возвращает: Todo[]. Скобка - это только начало реализации функции. Преимущество объявления возвращаемого типа состоит в том, что компилятор знает, когда функция не возвращает этот тип. Например, если функция вернула только массив целых чисел, компилятор не будет работать, что предотвратит возможную ошибку во время выполнения. Вот где светится машинопись.

Вы можете задаться вопросом, какой тип имеет функция, если она ничего не возвращает. (Нет или пустая инструкция возврата.

doStuff() : void {
 // I dont return anything*.
}

Теперь допустим, что у нас есть функция, которая удаляет последний элемент массива и возвращает этот элемент. Мы могли бы объявить его как:

removeLastElementOfArray(array: any[]): any {
    return array.pop();
}

Может быть, для нас очевидно, что, учитывая массив чисел в качестве аргумента этой функции, функция будет возвращать число. Однако мы аннотировали возвращаемый тип любым, поэтому компилятор машинописного текста не имеет представления о том, что междутипы в массиве и возвращаемый тип.

Для этого у нас есть обобщения:

 removeLastElementOfArray<T>(array: T[]): T {
    return array.pop();
}

Теперь компилятор машинописного текста знает, что если мы передадим массив строк, функция вернет строкуТо же самое относится и к любому другому типу. Обобщения являются очень мощными, так что вы должны как можно больше предотвращать использование любого из них.

* Технически в JS функции без операторов возврата возвращают неопределенное, но мы помечаем их с помощью 'void ', потому что именно так определяются эти типы функций в типизированных языках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...