Какая польза от угловых скобок, таких как methodname <string>() в машинописи - PullRequest
0 голосов
/ 27 сентября 2018

Не могли бы вы мне помочь, если есть какой-то учебник, почему мы используем угловые скобки <>, например, в скрипте типа. Я привел здесь некоторый код, мне нужно объяснение.

export class HomePage {

     constructor(public navCtrl: NavController) {
         let a = this.testfunc<boolean>(4);
         console.log(a);
     }

     testfunc<T>(s) {
         return s;
     }
}

Спасибо

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Эти угловые скобки известны как Generics.Обобщения позволяют вам определять заполнители для типа полей, методов класса.
Это просто позволяет определить тип позднее.

export class HomePage {
    constructor(public navCtrl: NavController) {
    let a = this.testfunc<boolean>(4);
    console.log(a);
}

    testfunc<T>(s){
         return s;
    }
}

Для вашего метода testFunc выВы просто создаете метод, который может принимать данные любого типа.Это T между угловыми скобками называется аргументом типа.

Использование обобщений дает вам некоторую свободу, которую вы не получите иначе.Например, с помощью универсального метода я могу передать любой тип в качестве аргумента типа.

функция Rand (значение: T) {...}

Установка T в качестве string будет означать, что каждый T в этой функции должен быть строкой, то же самоеидет для других типов.

0 голосов
/ 27 сентября 2018

Они указывают генерики .testfunc<T>(s){ return s; } означает, что testfunc принимает параметр общего типа T.testfunc<boolean>(4) предоставляет аргумент типа (boolean) для этого параметра типа.В этом примере он ничего не делает, поскольку testfunc не использует T, но учтите:

function foo(arg: string) {
    let numbers: Array<number> = [];
    numbers[0] = arg; // Error: Type 'string' is not assignable to type 'number'.
}

Это объявляет numbers как массив number.Поскольку arg является строкой, вы не можете выполнить numbers[0] = arg.

Сравните с:

function foo<T>(arg: T) {
    let numbers: Array<T> = [];
    numbers[0] = arg; // Error    
}

Теперь foo не знает, что содержит numbers,только то, что оно содержит, будет соответствовать типу arg.Итак, оба эти вызова действительны:

foo<number>(4);
foo<string>("bar");

Я включил аргументы типа в эти вызовы для выделения, но TypeScript может выводить их большую часть времени:

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