Реализация интерфеса

как можно по другому (через класс) реализовать интерфейс, а так же что дает первая строка в интерфейсе? это просто интерфейс к функции ?

export interface ITest {
  (): string;
  name: string;
}

я сделал через функцию:

function d(): ITest {
  let v: ITest = (): string => "123";
  // v.name = "123";
  return v;
}

Ответы (1 шт):

Автор решения: Alexey Ten

https://www.typescriptlang.org/docs/handbook/interfaces.html#function-types

Этот интерфейс описывает функцию которая не принимает параметров и возвращает строку. Так же он говорит, что у функции есть имя.

Впрочем в JS у любой функции есть имя и когда мы объявили интерфейс

interface ITest {
  (): string;
};

то TS уже знает что это функция и автоматически применяет все методы и свойства функций. Например можно написать:

let f: ITest;
f.call(null)

потому что у функций есть метод call.

Так что любая функция без параметров возвращающая строку подходит под это описание.

interface ITest {
  (): string;
  name: string;
};

function a() { return 'ok'; }
const c = function() { return 'ok' };
const d = function e() { return 'ok' };
const b = () => 'ok';
const e = (s?: string) => s || 'ok';

function A(s: string) { return s };
function B() { return 42 };

declare function check(func :ITest): boolean;

// ok
check(a);
check(b);
check(c);
check(d);
// ok потому что в A можно не передавать параметры
check(e);

// not ok — у функции есть обязательный параметр
check(A);
// not ok — функция возвращает не строку
check(B);
// not ok — не функция
checK(42);

примеры

→ Ссылка