#typescript #typescript-typings
#typescript #typescript-typings
Вопрос:
Мне нужно создать .d.ts
файл для модуля npm, у меня есть этот модуль npm https://github.com/jeremyckahn/keydrown I am writing keydrown.d.ts
У него странный интерфейс:
import KD from 'keydrown';
KD.run(function KDRunTick() {KD.tick();});
//Forward
KD.W.press(() => dispatch({ type: "@INPUT/MOVE-FORWARD/PRESS" }));
KD.W.up(() => dispatch({ type: "@INPUT/MOVE-FORWARD/UP" }));
//Back
KD.S.press(() => dispatch({ type: "@INPUT/MOVE-BACK/PRESS" }));
KD.S.up(() => dispatch({ type: "@INPUT/MOVE-BACK/UP" }));
//Left
KD.A.press(() => dispatch({ type: "@INPUT/MOVE-LEFT/PRESS" }));
KD.A.up(() => dispatch({ type: "@INPUT/MOVE-LEFT/UP" }));
///etc
Мой текущий .d.ts
файл выглядит так:
declare module 'keydrown' {
interface KeyObject{
press(callback: Function): void;
up(callback: Function): void;
}
export default interface KD {
run(callback: Function): void;
ZERO:KeyObject
ONE:KeyObject
TWO:KeyObject
THREE:KeyObject
FOUR:KeyObject
FIVE:KeyObject
SEVEN:KeyObject
EIGHT:KeyObject
NINE:KeyObject
A:KeyObject
B:KeyObject
C:KeyObject
D:KeyObject
E:KeyObject
F:KeyObject
G:KeyObject
H:KeyObject
I:KeyObject
J:KeyObject
K:KeyObject
L:KeyObject
M:KeyObject
N:KeyObject
O:KeyObject
P:KeyObject
Q:KeyObject
R:KeyObject
S:KeyObject
T:KeyObject
U:KeyObject
V:KeyObject
W:KeyObject
X:KeyObject
Y:KeyObject
Z:KeyObject
ENTER:KeyObject
SHIFT:KeyObject
ESC:KeyObject
SPACE:KeyObject
LEFT:KeyObject
UP:KeyObject
RIGHT:KeyObject
DOWN:KeyObject
BACKSPACE:KeyObject
DELETE:KeyObject
TAB:KeyObject
TILDE:KeyObject
CTRL:KeyObject
}
}
К сожалению, это приводит к ошибке в реализации:
'KD' only refers to a type, but is being used as a value here. [2693]
Ответ №1:
Модуль typescript может экспортировать как значения, так и типы. Итак, когда вы говорите export default interface
, что объявляете экспортируемый тип.
Вместо этого вы хотите объявить, что модуль экспортирует значение. Для этого добавьте a const
в объявление вашего модуля и установите его в качестве экспорта по умолчанию.
const defaultExport: KD
export default defaultExport
export interface KD { ... } // removed "default"