2015-03-07 37 views
8

Tôi đang viết một grunt task trong TypeScript. Tôi đang cố gắng dịch một cái gì đó tôi đã có trong JavaScript.Khai báo loại 'this' trong một hàm typescript?

Vì vậy, khi grunt chạy một tác vụ, nó sẽ chạy một hàm. Khi nó chạy, grunt đặt this cho một đối tượng có các thuộc tính hữu ích, giống như cách mà jQuery overloads this với phần tử bạn đang làm việc. Tôi có thể truy cập các thuộc tính hữu ích như this.files;

grunt.registerMultiTask('clean', function() { 
    this.files.forEach(function(f) { Delete(f); }); 
}); 

Vì vậy, "xóa tất cả các tệp trong this.files".

Tuy nhiên, trong TypeScript, tôi không biết liệu bạn có thể 'gợi ý' cho trình biên dịch là this là một loại cụ thể, vì vậy tôi không nhận được intellisense. Làm cách nào để tôi cho TypeScript xem xét this là một loại khác?

Trả lời

2

Làm thế nào để nói với typescript để coi đây là một loại khác nhau

Không có một cú pháp dành riêng cho việc này chưa nhưng có những cuộc đàm phán về nó: https://github.com/Microsoft/TypeScript/issues/229

Đối với bây giờ những gì bạn đã làm là một cách hiệu quả là cách duy nhất mặc dù tôi sẽ không sử dụng một khẳng định và chỉ sử dụng một loại chú thích:

var self:grunt.task.IMultiTask<string> = this; 
self.files.forEach(function (f) { 

}); 
0

Tôi có một câu trả lời. Tôi có thể làm điều này;

var self = <grunt.task.IMultiTask<string>>this; 
self.files.forEach(function (f) { 

}); 

hoạt động OK. Nó sẽ có hậu quả, như không có khả năng viết các chức năng mũi tên ...

+1

Bạn một mũi tên vẫn viết các hàm, vì chúng sẽ đóng trên biến 'self'. 'this' trong các chức năng mũi tên vẫn sẽ được gõ sai, nhưng ít nhất bạn có thể lưu một vài ký tự! – Yourpalal

8

Bây giờ (từ TS 2.0), bạn có thể xác định chức năng của this loại bằng cách sử dụng giả tham số này (nên là người đầu tiên):

grunt.registerMultiTask('clean', function(this:SomeType) { 
    //... 
}); 
0

Trong khi tôi phát hiện ra rằng bây giờ có thể với điều này:

class ClassyClass { 
    prop = 'Juicy Strings' 
} 

function x(this: ClassyClass) { 
    console.log(this.prop) 
} 

Tôi đã đi thích một sự thay thế mà không mất bất động sản trong các đối số dòng

function x() { 
    const that: ClassyClass = this 

    console.log(that.prop) 
} 
Các vấn đề liên quan