У меня есть класс со статическим методом:
class Application {
static get(): string {
...
}
}
Теперь я хочу сослаться на этот статический метод get в другом классе.Я знаю, что могу сделать это:
class Caller {
klass: { get (): typeof Application["get"] }
}
Это легко работает, если метод не принимает аргументов. Редактировать: Пожалуйста, посмотрите ниже, почему это неправильно
Теперь, если я добавлю аргумент:
class Application {
static get(argument: string): string {
...
}
}
... Я также должен изменить Caller
(илюбой другой класс, имеющий эту подпись):
class Caller {
klass: { get (argument: string): typeof Application["get"] }
}
Есть ли способ избежать этого?Потому что очевидно, что klass.get
всегда следует за сигнатурой функции Application.get
.Есть ли способ сказать машинописи что-то вроде этого:
class Caller {
klass: { get (signatureof typeof Application["get"]): typeof Application["get"] }
}
Редактировать : На самом деле я только что понял, что выше неправильно : я действительно определил *От 1028 * до вернуть что-то, что ведет себя как typeof Application["get"]
.
Я дал ему новый выстрел с этим:
class Caller {
klass: {
[Key in keyof typeof Application]: typeof Application[Key]
}
}
... хотя мне еще предстоитпосмотрим, решит ли это это, brb.
Edit 2 : оба пути кажутся возможными:
// reference all properties
class Caller {
klass: {
[Key in keyof typeof Application]: typeof Application[Key]
}
}
// or if only one specific thing is needed
// reference one property
class Caller {
klass: {
get: typeof Application["get"]
}
}
К сожалению, если метод ссылок более сложныйНапример, get()
получает доступ к статическим свойствам, определенным в Application
, однако это становится более сложным, поскольку машинописный текст будет жаловаться на то, что они не были найдены (если есть ссылка только на метод, а не на каждое свойство).
ТакЯ думаю, что путь должен состоять в том, чтобы ссылаться на все свойства, чтобы быть на безопасной стороне.