2016-01-12 15 views
26

Ngày tốt lành. Tôi mới dùng Type Script, sử dụng VSCode.Đối số của loại 'X' không thể gán cho tham số kiểu 'X'

Bắt lỗi sau đây:

  1. lỗi TS2322: Loại '() => string' là không thể chuyển nhượng để gõ 'chuỗi'.

  2. TS2322 lỗi: Loại '() => số' không thể chuyển nhượng để gõ 'số'.

Bộ luật:

DTO.ts

interface DTO { 

    getId(): number; 
    getValue(): string; 
} 
export = DTO; 

LinkedObject.ts

class LinkedObject { 

    public value: string = "Not Set"; 
    public id: number = 0; 

    constructor(value?: string, id?: number) { 
     this.value = value; 
     this.id = id; 
    } 
} 
export = LinkedObject; 

Tôi cố gắng để nhanh chóng LinkedObject lớp sử dụng trên các phương pháp giao diện được đề cập:

TravelClientFormPopulator.ts

class TravelClientFormPopulator { 

    public populateComboBoxUsingDTOs(dataObjects: Array<DTO>, comboBoxID: string): void { 

     // Get the combo box 
     var selectElement = <HTMLSelectElement> document.getElementById(comboBoxID); 
     // Reset the options 
     selectElement.options.length = 0; 

     var linkedObjectsToAdd: LinkedObject[] = new Array<LinkedObject>(); 

     var defaultLinkedObject: LinkedObject = new LinkedObject("Not Selected", 0); 

     linkedObjectsToAdd.push(defaultLinkedObject); 

     for (var i = 0; i < dataObjects.length; i++) { 
      var value: string = dataObjects[i].getValue; // Error here 
      var id: number = dataObjects[i].getId; // And here 
      var linkedObject: LinkedObject = new LinkedObject(value, id); 
     } 
    } 
} 

Bất kỳ trợ giúp sẽ được đánh giá cao.

Trả lời

31

Bạn bỏ lỡ ngoặc:

var value: string = dataObjects[i].getValue(); 
var id: number = dataObjects[i].getId(); 
+8

Cũng hữu ích khi bạn hiểu những gì lỗi đang nói để giúp bạn trong tương lai. 'Type '() => string' không thể gán cho kiểu 'string'.' về cơ bản là nói trong trường hợp này" Một hàm trả về một chuỗi không thể gán cho một biến kiểu chuỗi "Khi bạn đọc'() => chuỗi' chính xác, tất cả nên có ý nghĩa. Nếu đó là JS thuần túy, bạn sẽ không gặp lỗi và biến của bạn sẽ trỏ đến một hàm thay vì giá trị được trả lại và thậm chí còn khó khăn hơn để theo dõi những gì đang diễn ra. – DeezCashews

3

Cũng thêm kịch bản khác mà bạn có thể nhìn thấy những lỗi

  1. Đầu Kiểm tra bạn phiên bản trình biên dịch, Tải mới nhất trình biên dịch nguyên cảo để hỗ trợ ES6 cú pháp

  2. nguyên cảo vẫn sản xuất ra ngay cả với lỗi đánh máy này không thực sự chặn sự phát triển,

Khi bạn nhìn thấy những lỗi Check for Câu lệnh trong phần khởi tạo hoặc khi kêu gọi những phương pháp hoặc các biến,
Kiểm tra xem các thông số của chức năng của sai Loại dữ liệu, bạn khởi tạo là 'chuỗi' và gán một 'boolean' hoặc 'số'

Ví dụ

1.

private errors: string; 
    //somewhere in code you assign a boolean value to (string)'errors' 
    this.errors=true 
    or 
    this.error=5 

2.

private values: Array<number>;  
    this.values.push(value); //Argument of type 'X' is not assignable to parameter of type 'X' 

Các Thông báo lỗi ở đây là vì các dấu ngoặc vuông cho mảng Khởi tạo là mất tích, Nó hoạt động thậm chí không có nó, nhưng cảnh báo màu đỏ VS Mã.

private values: Array<number> = [];  
this.values.push(value); 

Lưu ý:
Hãy nhớ rằng Javascript typecasts theo giá trị được giao, Vì vậy, nguyên cảo thông báo cho họ nhưng mã thực hiện ngay cả với các lỗi này được nhấn mạnh trong VS Mã

Ex:

var a=2; 
typeof(a) // "number" 
var a='Ignatius'; 
typeof(a) // "string" 
0

Trong trường hợp của tôi, lạ đủ, tôi nhớ da diết nhập khẩu của lớp nó đã phàn nàn về và IDE của tôi đã không phát hiện nó.

1

tôi đang làm góc 2 và nguyên cảo và tôi đã không nhận ra tôi đã có một không gian trong mũi tên ký hiệu của tôi

tôi đã .map(key = > thay vì .map(key =>

Chắc chắn giữ cho đôi mắt của bạn mở cho các lỗi cú pháp ngu ngốc

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