2017-07-28 23 views
7

Tôi đang cố gắng để cung cấp typings cho gói mà không có họ:Tôi nên đặt các tệp .d.ts tùy chỉnh ở đâu?

error TS7016: Could not find a declaration file for module 'inputmask-core'. './node_modules/inputmask-core/lib/index.js' implicitly has an 'any' type. 
Try `npm install @types/inputmask-core` if it exists or add a new declaration (.d.ts) file containing `declare module 'inputmask-core';` 

Tôi đang sử dụng ts-loader trong webpack với nguyên cảo 2.4.2, và tôi có rễ loại sau đây thiết lập trong tsconfig.json:

"typeRoots": [ 
    "./node_modules/@types", 
    "./src/client/types" 
] 

tôi đã cố gắng để bắt chước cấu trúc gói trong node_modules/@types:

src/client/types 
|--inputmask-core 
    |--index.d.ts 

với sự sau trong index.d.ts:

declare class InputMask {} 
export default InputMask; 

Nhưng lỗi vẫn còn đó. Tôi đang làm gì sai? Tôi nên đặt các tệp .d.ts tùy chỉnh ở đâu?

Và sự khác nhau giữa node_modules/@types và bất kỳ loại gốc nào khác? Tại sao TypeScript xử lý chúng khác nhau?

Trả lời

3

giải pháp có thể: đặt dòng sau vào index.d.ts, và nó sẽ biên dịch:

declare module "inputmask-core" { 
    declare class InputMask {} 
    export default InputMask; 
} 

tôi vẫn không hiểu được xử lý đặc biệt mà node_modules/@types được, mặc dù.

+0

'node_modules/@ types' được sử dụng để giữ các gói bên thứ ba chứa thông tin loại cho các gói không đi kèm với các khai báo được tích hợp. Nó được xử lý đặc biệt vì bạn không nhập trực tiếp từ nó, thay vì mỗi gói khai báo trong nó được xem là lớp phủ lên trên gói chứa các loại. '" typeRoots "' cho phép bạn tùy chỉnh vị trí hoặc thêm các thư mục bổ sung được xử lý theo kiểu đặc biệt này. –

+0

@AluanHaddad - Nếu các thư mục bổ sung trong "typeRoots" cũng được xử lý theo cách đặc biệt này, thì tại sao di chuyển thư mục cho một số gói từ 'node_modules/@ types' sang trình biên dịch ngắt kiểu typeRoot khác? – Rogach

+0

Không có đủ thông tin ở đây để kể. Không có tsconfig, độ phân giải mô-đun, v.v. Những gì bạn đã kết thúc là một mô-đun bên ngoài _ambient_ và có ngữ nghĩa độ phân giải khác nhau. Đặc biệt, nó không được giải quyết bởi đường dẫn của tập tin. –

Các vấn đề liên quan