Trong dự án angular2 của tôi, tôi đang cố gắng mở rộng nguyên mẫu của lớp chuỗi bằng cách sử dụng kiểu chữ. Đây là mã của tôi:Phương pháp mở rộng trong bản ghi số (hệ thống)
interface String
{
startsWith(s:string);
contains(s:string);
containsOr(s1:string, s2:string);
}
String.prototype.startsWith = function (s:string):boolean {
return this.indexOf (s) === 0;
}
String.prototype.contains = function (s:string):boolean {
return this.indexOf(s) > 1;
}
String.prototype.containsOr = function (s1:string, s2:string):boolean {
return this.indexOf(s1) > 1 || this.indexOf (s2) > 1;
}
Với mã này, biên dịch dự án (cũng là nội dung hỗ trợ của Visual Studio Mã giúp tôi) nhưng tại thời gian chạy tôi nhận được một 'chứa không được định nghĩa'.
Tôi đang làm gì sai?
Thanks a lot
PS: đây là tsconfig tôi:
{
"compilerOptions": {
"target": "es5",
"module": "system",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false,
"outDir": "wwwroot/app/source/"
},
"exclude": [
"node_modules",
"bower_components",
"wwwroot",
"typings/main",
"typings/main.d.ts"
]
}
EDIT
tôi nhận thấy rằng việc nhập các js tập tin trong index.html nó hoạt động, nhưng tôi không thích cách tiếp cận này.
<script src="app/source/utils/extensions.js"></script>
Bạn đã nhập tiện ích mở rộng của mình chưa? Nếu bạn đang sử dụng bộ nạp mô-đun, bạn sẽ phải kiểm tra xem mã bạn đã viết có thực sự được tải hay không. –
Cảm ơn Luka. Ý bạn là gì khi nhập? Tôi không xuất khẩu lớp học. Tôi đã cập nhật câu hỏi với nhiều chi tiết hơn – user3471528
Tốt trong System.js, bạn sẽ cần phải thông báo cho trình biên dịch biết nơi tìm mã của bạn. Nó tuân theo tất cả các hàng nhập của bạn và giải quyết chúng, tải nội dung. Bằng cách đó bạn có thể tránh đặt tất cả các tệp js vào html của bạn. –