2017-03-20 36 views
6

Tôi đang gặp vấn đề với tờ khai loại nguyên cảo trùng lặp trong trường hợp sau đây:tờ khai loại nguyên cảo nhân đôi

Tôi đã có cây phụ thuộc sau cho ứng dụng của tôi A:

A->@angular/http:2.3.1 
A->B->@angular/http:2.3.1 

Cả A và B được quản lý bởi npm. Sau khi chạy

npm install 

hệ thống tập tin trông như thế này:

A/node_modules/ 
    @angular/http 
    ... 
    B/node_modules 
    @angular/http 

Vấn đề dường như là hiện nay có hai tờ khai loại @ góc/http loại như đáp ứng, hoặc Headers. Và bằng cách nào đó, trình biên dịch Typecript dường như không thể xử lý điều đó - dẫn đến thông báo lỗi sau:

TS2453: Đối số kiểu 'T' không thể suy ra từ cách sử dụng. Xem xét chỉ định các đối số kiểu một cách rõ ràng. Loại đối số ứng cử viên 'Phản hồi' không phải là một đối số loại hợp lệ bởi vì nó không phải là siêu kiểu của ứng cử viên 'Phản hồi'. Các loại 'tiêu đề' thuộc tính không tương thích. Nhập 'Tiêu đề' không được chỉ định để nhập 'Tiêu đề'. Các loại có khai báo riêng của thuộc tính riêng lẻ 'mayBeSetNormalizedName'.

Đọc tin nhắn, tôi đoán đây là một hickup của Typescript không thể khớp với các khai báo kiểu trùng lặp.

Bất kỳ ai cũng gặp phải vấn đề tương tự? Làm thế nào để xử lý vấn đề đó? Làm thế nào để xử lý va chạm tên như vậy?

+0

Tôi biết có câu hỏi liên quan này: http://stackoverflow.com/questions/42412938/argument-of-type-connectionbackend-is-not-assignable-to-parameter-of-type-con. Câu trả lời không thực sự thỏa đáng, bởi vì trong trường hợp của tôi, tôi không thể (không muốn) đơn giản di chuyển các nguồn từ B vào A. Phải có một cách khác. – Robert

Trả lời

4

Trong khi đó tôi phát hiện ra rằng bạn có thể sửa lỗi này bằng cách nhập khẩu rõ ràng các loại theo bên trong lớp đang sử dụng A. Trong trường hợp của tôi (cp. thông báo lỗi ở trên), tôi cần phải:

import {Response, Headers} from '@angular/http'; 
+0

nó cũng làm việc cho tôi. cảm ơn! –

+0

Tốt, cảm ơn bạn đã xác thực! – Robert

1

Tôi đã gặp vấn đề tương tự. Về cơ bản có hai cách để giải quyết vấn đề này.

  1. Thực hiện một mô-đun UMD của dự án B. Điều này có thể mất rất nhiều thời gian
  2. sử dụng as any as TheRequiredObject xem dưới đây.

Hãy giả sử bạn có lớp này trong dự án b:

export class B{ 
    getSome(): Observable { 
     return this.http.get('some_url'); 
    } 
} 

và đây là những gì bạn muốn trong dự án a:

export class A{ 
    getSomeFromB: Observable{ 
     return B.getSome() as any as Observable; 
    } 
} 
Các vấn đề liên quan