Вопрос:

Каков рекомендуемый способ добавления подписи индекса в функцию, определенную в машинописи

typescript typescript2.0

97 просмотра

1 ответ

9584 Репутация автора

Допустим, у меня есть функция el, определенная в машинописи:

function el():string { .. }

Я хотел бы удалить нарушение типа (не имеет подписи индекса) при последующем добавлении ключей в el:

el.x = () => {...}

Можно ли обойтись без кастинга на кого-либо?

На данный момент лучшее решение, которое я нашел, - это определить отдельный интерфейс и привести его к типу при назначении:

interface ElFactory {
  [index: string]: () => string
  (): string
}

А потом:

(el as ElFactory).x = () => {}

Можно ли полностью избежать кастинга? Как, например, при определении функции связать ее с интерфейсом или указать сигнатуру индекса при определении функции?

Автор: lorefnon Источник Размещён: 09.04.2017 09:38

Ответы (1)


1 плюс

18280 Репутация автора

Решение

Вы можете привести свою функцию к интерфейсу при ее создании:

interface ElFactory {
  [index: string]: () => string
  (): string
}

var el = function (): string {
    return "test";
} as ElFactory;

el.test1 = () => "22"; // works
el.test2 = "22"; // error

До TypeScript 2.2 вам нужно будет использовать скобочную нотацию для определения свойств, чтобы это работало:

el["test1"] = () => "22"; // works
el["test2"] = "22"; // error
Автор: Saravana Размещён: 09.04.2017 11:44
Вопросы из категории :
32x32