@maratt

Как заменить на interface?

есть функция
function test(a: number, b: string, c: () => void): void {
	...
}

как использовать тут interface?
interface TestInterface {
	a: number;
	b: string;
	c: () => void;
}
  • Вопрос задан
  • 100 просмотров
Пригласить эксперта
Ответы на вопрос 3
Robur
@Robur
Знаю больше чем это необходимо
function test({a,b,c}: TestInterface)
Ответ написан
Комментировать
Aetae
@Aetae Куратор тега TypeScript
Тлен
Используйте вариант Robur.
Почему? Потому что в общем смысле то чего вы хотите автоматически получить невозможно, т.к. порядок ключей в объекте(и интерфейсе) значения не имеет, т.е. нет никакой разницы меж:
interface TestInterface {
  a: number;
  b: string;
  c: () => void;
}
и
interface TestInterface {
  c: () => void;
  a: number;
  b: string;
}
а в функции, очевидно, имеет.

Вручную можно сделать так:
function test(a: TestInterface['a'], b: TestInterface['b'], c: TestInterface['c']): void {
  // ,,,
}


Если порядок аргументов таки значения не имеет - в принипе можно накошмарить сложный тип, с использованием ...args, но не нужно.)
Ответ написан
Комментировать
@forspamonly2
общий тип для всех аргументов функции (он же тип rest параметра) - это tuple.

так что, в вашем случае
type TestInterface = [number, string, ()=>void];
и передавать его надо с тремя точками. единственно, если передавать прямо массив литералом, надо будет указать as const чтобы оно поняло, что это tuple.

вот пример того, что работает, а что нет на плейграунде.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы