Как создать машинописный файл определения с экспортом по умолчанию и функциями внутри? - PullRequest
0 голосов
/ 02 января 2019

Мне нужно использовать внутреннюю библиотеку для аутентификации пользователей, но теперь я должен использовать эту библиотеку в проекте машинописного текста, поэтому я пытаюсь создать ее файл определения (.d.ts), но ни один из них не ' пробовал работает.

Обычно я бы использовал это так:

import login from 'int-login';
...
login.requestAuth('admin', 'admin').then(user => console.log(user));

Итак, я попытался создать файл определения следующим образом:

declare module 'int-login' {
    export default class login {
        requestAuth(username: string, password: string);
    }
}

Но это возвращаемая ошибка: свойство 'requestAuth' не существует для типа 'typeof login'. Я попытался переместить функцию из класса 'login', но затем он говорит, что login не существует, когда я импортирую его в свой файл машинописи.

1 Ответ

0 голосов
/ 02 января 2019

Формат файла определения зависит от того, упакован ли файл определения вместе с библиотекой или находится в проекте, который зависит от библиотеки.Если вы хотите упаковать определения с библиотекой, то удалите оболочку declare module и убедитесь, что в файле библиотеки package.json есть свойство "types" с расположением файла определения.

Похоже, вы ожидаете, что requestAuth вернет обещание, поэтому вам нужно указать тип возвращаемого значения в определениях.

Файл определения должен иметь это содержимое.

export interface User {
    // list appropriate property types here
}

export default class login {
    requestAuth(username: string, password: string): Promise<User>;
}

Нас другой стороны, если файл определения находится в проекте, который зависит от имени входа в систему (возможно, в папке types/) или в отдельном пакете @types/int-login, то вам do нужна упаковка declare module,Вам также необходимо убедиться, что файл определения включен в значение конфигурации "include" в tsconfig.json.В этом случае файл определения будет выглядеть так:

declare module "int-login" {
    export interface User {
        // list appropriate property types here
    }

    export default class login {
        requestAuth(username: string, password: string): Promise<User>;
    }
}
...