jquery - თავიდან აირიდოთ დუბლირებული რეფერენსი/გარე ჯავასკრიპტის ბიბლიოთეკის იმპორტი Typescript-ში AMD მოდულების გამოყენებისას
გავუშვათ, რომ მე ვიყენებ --module AMD რათა მივიღო AMD მოდულის მხარდაჭერა Typescript-ით და ვიყენებ requirejs. ახლა, გამოყენებით jquery.ts.d DefinitelyTyped-დან, მე მივედი შემდეგი მინიმალური მაგალითის:
/// <reference path="../../typings/jquery/jquery.d.ts" />
import $ = require("jquery");
export class Greeter
{
sayHello() {
$('#mydiv').text('hello world');
}
}
კარგად ჩანს, რომ მე უნდა დავასახელო jQuery ორჯერ: ერთხელ ///<reference ... /> განაცხადის საშუალებით და ერთხელ import jquery=require("jquery") განცხადების საშუალებით.
ახლა, თუ გავტოვებ ///<reference ... /> ნაწილს, ტიპების სკრიპტის კომპილატორი tsc მოიხსენიებს უცნობ $ ცვლადს. სხვა მხრივ, თუ გავტოვებ import განაცხადს, კომპილაცია იმუშავებს, მაგრამ რეალურ დროში jQuery არ ჩაერთვება (რადგან ის არაა შედგენილ წყაროდან მოთხოვნილ კომპონენტების სიაში).
ასე რომ, ერთადერთი გზა რაც მე ვხედავ არის ყოველთვის ორივე განცხადების ჩართვა, რაც ჩემთვის ცუდად ჟღერს, რადგან მე თავის გამეორება ხდება. ეს არის "მოლოდინური გზა"(TM) თუ უბრალოდ რაღაცას ვკარგავ აქ?
პასუხი #1
გირჩევთ დაამატოთ vendor.d.ts ფაილი, რომელიც გაერთიანებს თქვენს ყველა გარე განსაზღვრებას, როგორიცაა :
/// <reference path="./jquery/jquery.d.ts" />
/// <reference path="./other/other.d.ts" />
და შემდეგ თქვენ მხოლოდ აღნიშნავთ vendor.d.ts :
/// <reference path="../../typings/vendor.d.ts" />
import $ = require("jquery");
დამატებით, თუ იყენებთ tsd https://github.com/DefinitelyTyped/tsd ეს ქმნის თქვენთვის tsd.d.ts ფაილს, რომელიც ასრულებს vendor.d.ts-ის როლს
პასუხი #2
თუ გაქვთ ფაილი სახელად jquery.d.ts იმავე გზაზე, და ეს ფაილი დაწერილია ზედა დონის ექსპორტით (საგულისხმოა არა declare module "jquery" {), მაშინ თქვენთვის არ არის საჭირო reference ტეგი.
თქვენ ასევე შეგიძლიათ ყველა თქვენი .d.ts ფაილი გადმოაწოდოთ როგორც პირდაპირი არგუმენტები tsc-ს
სხვა შემთხვევაში, კომპილატორმა ვერ იცის, სად უნდა მოიძიოს ინფორმაცია ტიპის შესახებ jQuery მოდულისთვის.
