2016-10-29 21 views
15

Giả sử tôi muốn sử dụng mô-đun dotenv trong dự án TypeScript của tôi và cài đặt .d.ts bằng cách sử dụng npm install @types/dotenv --save. Sau đó, tôi nhận ra rằng các loại không chính xác. Ví dụ, hàm config() không trả về boolean nhưng là một đối tượng phong phú hơn.Cách ghi đè định nghĩa loại TypeScript không chính xác được cài đặt qua @ types/package

Làm cách nào để giải quyết tình huống này? Tôi có nên chỉ sao chép định nghĩa kiểu đã tải xuống sang một tệp khác, cập nhật nó theo cách thủ công và gỡ cài đặt @ types/dotenv? Có cách nào tốt hơn? (Tôi cần sửa chữa ngay lập tức, không phải sau khi nó đã được hợp nhất bởi các nhà bảo trì thượng lưu.)

+0

Bạn chỉ có thể thêm giao diện mới có cùng tên với khai báo và thêm phương thức mới làm hợp đồng. – CodeNotFound

+0

Đó là phương pháp tương tự, chỉ với chữ ký đã sửa. – Borek

+0

Đó là lý do tại sao tôi nói với bạn để tạo một giao diện mới (sử dụng cùng tên với giao diện trong d.ts) và thêm phương thức mới vào nó với chữ ký mới (giống như quá tải). – CodeNotFound

Trả lời

5

Tôi sẽ kiểm tra xem phiên bản dotenv và phiên bản @types/dotenv có được căn chỉnh không.

Nếu đó là cách sạch sẽ hơn để tự sửa đổi .d.ts. Để thực hiện việc này: npm remove @types/dotenv. Tạo một thư mục types về dự án của bạn. Sao chép toàn bộ thư mục dotenv được tìm thấy trong node_modules/@types trong đó.

Sau đó sửa chữa d.ts bạn trong đó và sửa đổi tsconfig.json của bạn để nói với anh ấy cũng để tìm trong thư mục mới của bạn với nhiều loại thiếu với typeRoots như thế này:

{ 
"compilerOptions": { 
    "module": "commonjs", 
    "noImplicitAny": true, 
    "typeRoots": [ 
     "./node_modules/@types", 
     "./types/", 
    ] 
}, 
"files": ["./app.ts"] 
} 

(Đừng quên để thêm ./node_modules/@types hoặc các loại khác bạn có với npm sẽ không được tìm thấy nữa)

Hy vọng điều đó sẽ hữu ích!

+0

Điều gì sẽ xảy ra nếu các loại bị thiếu? Repo tôi đang sử dụng không còn được duy trì (jimp) nữa. Các kiểu gõ có lỗi nhưng được khai báo trong thư mục nguồn jimp (jimp.js và jimp.d.ts). Tôi cần thay thế cục bộ để ghi đè các loại được cung cấp. –

+0

Tôi tìm thấy câu trả lời của mình. Dù sao cũng cảm ơn bạn! https://stackoverflow.com/questions/41627631/exclude-overwrite-npm-provided-typings –

+0

nếu không có gói '@ types /', nhưng thay vào đó khai báo nằm trong 'module-package-name/index.d .ts' hoặc 'module-package-name/types/index.d.ts'? –

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