Ви можете анотувати виклики як частину типу або інтерфейсу наступним чином
interfaceReturnString{():string}
Примірником такого інтерфейсу буде функція, яка повертає рядок, наприклад.
declareconstfoo:ReturnString;constbar=foo();//bar виводиться як рядок
Obvious examples
Звичайно, така callable анотація також може вказувати будь-які аргументи / необов’язкові аргументи / залишкові аргументи за потреби. Наприклад, ось складний приклад:
Інтерфейс може надавати кілька викликаних анотацій для визначення перевантаження функції. Наприклад:
interfaceOverloaded{(foo:string):string(foo:number):number}// приклад імплементаціїfunctionstringOrNumber(foo:number):number;functionstringOrNumber(foo:string):string;functionstringOrNumber(foo:any):any{if (typeof foo ==='number') {return foo * foo;}elseif (typeof foo ==='string') {return`hello ${foo}`;}}constoverloaded:Overloaded= stringOrNumber;// приклад використанняconststr=overloaded('');// тип `str` визначений як `string`constnum=overloaded(123);// тип of `num` визначений як `number`
Звичайно, як і тіло any інтерфейсу, ви можете використовувати тіло викликаного інтерфейсу як анотацію типу для змінної. Наприклад:
Arrow Syntax
Стрілочний синтаксис.
Щоб полегшити вказівку сигнатур, які можна викликати, TypeScript також допускає прості анотації типу стрілок. Наприклад, функцію, яка приймає number a повертає string можна позначити як:
Єдине обмеження синтаксису стрілок: ви не можете вказати перевантаження. Для перевантажень ви повинні використовувати повний синтаксис { (someArgs): someReturn }.
Newable
Newable — це лише спеціальний тип анотації типу callable із префіксом new. Це просто означає, що вам потрібно викликати за допомогою new, наприклад.
interface CallMeWithNewToGetString {
new(): string
}
// використання
declare const Foo: CallMeWithNewToGetString;
const bar = new Foo(); // передбачається, що bar має тип string