Πώς μπορείτε να παράγουν ένα .d.ts «τυποποιήσεις» αρχείο ορισμού από μια υπάρχουσα βιβλιοθήκη JavaScript;

ψήφοι
127

Είμαι χρησιμοποιώντας πολλές βιβλιοθήκες τόσο τη δική μου και 3ο κόμμα. Βλέπω το «τυποποιήσεις» ο κατάλογος περιέχει κάποια για Jquery και WinRT ... αλλά πώς είναι αυτοί δημιούργησαν;

Δημοσιεύθηκε 02/10/2012 στις 10:29
πηγή χρήστη
Σε άλλες γλώσσες...                            


8 απαντήσεις

ψήφοι
168

Υπάρχουν μερικές επιλογές που είναι διαθέσιμες για εσάς, ανάλογα με τη βιβλιοθήκη στο ερώτημα, πώς είναι γραμμένο, και τι επίπεδο ακρίβειας που ψάχνετε. Ας επανεξετάσει τις επιλογές, σε περίπου φθίνουσα σειρά σκοπιμότητα.

Ίσως υπάρχει ήδη

Πάντα να ελέγχετε DefinitelyTyped ( https://github.com/DefinitelyTyped/DefinitelyTyped ) για πρώτη φορά. Αυτή είναι μια κοινότητα repo γεμάτη κυριολεκτικά χιλιάδες .d.ts αρχεία και είναι πολύ πιθανό το πράγμα που χρησιμοποιείτε είναι ήδη εκεί. Θα πρέπει επίσης να ελέγξετε TypeSearch ( https://microsoft.github.io/TypeSearch/ ), η οποία είναι μια μηχανή αναζήτησης για ΝΡΜ-δημοσιεύονται αρχεία .d.ts? αυτό θα έχει λίγο περισσότερο από ό, τι οι ορισμοί DefinitelyTyped. Μερικές μονάδες έχουν επίσης την αποστολή τους δικούς τους ορισμούς, στο πλαίσιο της κατανομής NPM τους, έτσι και να δούμε αν αυτή είναι η περίπτωση πριν προσπαθήσετε να γράψετε τη δική σας.

Ίσως δεν χρειάζεστε ένα

Γραφομηχανή υποστηρίζει τώρα την --allowJsσημαία και θα κάνει πιο συμπεράσματα JS με βάση το .js αρχεία. Μπορείτε να δοκιμάσετε συμπεριλαμβανομένου το αρχείο .js στην συλλογή σας, μαζί με την --allowJsρύθμιση για να δείτε αν αυτό σας δίνει αρκετά καλές πληροφορίες για τον τύπο. Γραφομηχανή θα αναγνωρίσει τα πράγματα όπως μαθήματα ES5 στιλ και τα σχόλια JSDoc σε αυτά τα αρχεία, αλλά μπορεί να πέσει μέχρι και αν η ίδια η βιβλιοθήκη προετοιμάζει με ένα περίεργο τρόπο.

Ξεκινήστε με --allowJs

Αν --allowJsσας έδωσε καλά αποτελέσματα και θέλετε να γράψετε ένα καλύτερο ορισμό αρχείο εαυτό σας, μπορείτε να συνδυάσετε --allowJsμε το --declarationνα δουν την «καλύτερη εκτίμηση» γραφομηχανή κατά τους τύπους της βιβλιοθήκης. Αυτό θα σας δώσει ένα αξιοπρεπές σημείο εκκίνησης, και μπορεί να είναι τόσο καλό όσο ένα αρχείο χέρι-συγγραφέας, αν οι παρατηρήσεις JSDoc είναι καλογραμμένο και ο compiler ήταν σε θέση να τα βρείτε.

Ξεκινήστε με DTS-gen

Εάν --allowJsδεν λειτουργήσει, ίσως να θέλετε να χρησιμοποιήσετε DTS-gen ( https://github.com/Microsoft/dts-gen ) για να πάρετε ένα σημείο εκκίνησης. Αυτό το εργαλείο χρησιμοποιεί το σχήμα χρόνου εκτέλεσης του αντικειμένου για να απαριθμήσει με ακρίβεια όλα τα διαθέσιμα ακίνητα. Στη θετική πλευρά αυτή τείνει να είναι πολύ ακριβή, αλλά το εργαλείο δεν υποστηρίζει ακόμα το ξύσιμο τα σχόλια JSDoc να συμπληρώσετε επιπλέον τύπους. Μπορείτε να εκτελέσετε αυτό σαν αυτό:

npm install -g dts-gen
dts-gen -m <your-module>

Αυτό θα δημιουργήσει your-module.d.tsστον τρέχοντα φάκελο.

Χτυπήστε το κουμπί snooze

Αν θέλετε απλά να το κάνουμε αργότερα και να πάει χωρίς τύπους για λίγο, στη γραφομηχανή 2.0 τώρα μπορείτε να γράψετε

declare module "foo";

το οποίο θα σας αφήσει importτη "foo"μονάδα με το είδος any. Αν έχετε μια παγκόσμια θέλετε να ασχοληθεί με αργότερα, απλά γράψτε

declare const foo: any;

η οποία θα σας δώσει μια fooμεταβλητή.

Απαντήθηκε 02/10/2012 στις 18:11
πηγή χρήστη

ψήφοι
25

Μπορείτε να χρησιμοποιήσετε είτε tsc --declaration fileName.tsσαν Ryan περιγράφει, ή μπορείτε να καθορίσετε declaration: trueκάτω compilerOptionsσε σας tsconfig.jsonμε την προϋπόθεση να έχετε ήδη ένα tsconfig.jsonπλαίσιο του σχεδίου σας.

Απαντήθηκε 04/08/2016 στις 00:54
πηγή χρήστη

ψήφοι
13

Ο καλύτερος τρόπος για να ασχοληθεί με αυτό (αν ένα αρχείο δήλωσης δεν είναι διαθέσιμη στις DefinitelyTyped ) είναι να γράψει δηλώσεις μόνο για τα πράγματα που χρησιμοποιείτε και όχι το σύνολο της βιβλιοθήκης. Αυτό μειώνει το έργο πολύ - και επιπλέον ο compiler είναι εκεί για να βοηθήσει με την διαμαρτύρεται για τις μεθόδους που λείπουν.

Απαντήθηκε 19/10/2015 στις 09:08
πηγή χρήστη

ψήφοι
10

Όπως λέει ο Ryan, ο compiler TSC έχει ένα διακόπτη --declarationο οποίος δημιουργεί ένα .d.tsαρχείο από ένα .tsαρχείο. Επίσης, σημειώστε ότι (με εξαίρεση bugs) γραφομηχανή υποτίθεται ότι είναι σε θέση να συγκεντρώσει Javascript, ώστε να μπορείτε να περάσετε τις υπάρχουσες javascript κώδικα για να τον compiler TSC.

Απαντήθηκε 03/10/2012 στις 00:02
πηγή χρήστη

ψήφοι
7

όπως περιγράφεται στο http://channel9.msdn.com/posts/Anders-Hejlsberg-Steve-Lucco-and-Luke-Hoban-Inside-TypeScript στις 00:33:52 είχαν κατασκευαστεί ένα εργαλείο για τη μετατροπή WebIDL και WinRT μεταδεδομένων σε d.ts γραφομηχανή

Απαντήθηκε 02/10/2012 στις 21:24
πηγή χρήστη

ψήφοι
2

Εδώ είναι μερικές PowerShell που δημιουργεί ένα ενιαίο αρχείο ορισμού γραφομηχανή μια βιβλιοθήκη που περιλαμβάνει πολλαπλά *.jsαρχεία με τις σύγχρονες JavaScript.

Πρώτον, αλλάξτε όλες τις επεκτάσεις .ts.

Get-ChildItem | foreach { Rename-Item $_ $_.Name.Replace(".js", ".ts") }

Δεύτερον, χρησιμοποιήστε το μεταγλωττιστή γραφομηχανή για να δημιουργήσει αρχεία ορισμού. Θα υπάρξει ένα μάτσο λάθη μεταγλώττισης, αλλά μπορούμε να αγνοήσουμε εκείνους.

Get-ChildItem | foreach { tsc $_.Name  }

Τέλος, συνδυάζουν όλα τα *.d.tsαρχεία σε ένα index.d.ts, αφαιρώντας τις importδηλώσεις και την απομάκρυνση του defaultαπό την κάθε δήλωση κατά την εξαγωγή.

Remove-Item index.d.ts; 

Get-ChildItem -Path *.d.ts -Exclude "Index.d.ts" | `
  foreach { Get-Content $_ } | `
  where { !$_.ToString().StartsWith("import") } | `
  foreach { $_.Replace("export default", "export") } | `
  foreach { Add-Content index.d.ts $_ }

Αυτό τελειώνει με ένα και μόνο, μπορεί να χρησιμοποιηθεί index.d.tsτο αρχείο που περιλαμβάνει πολλά από τους ορισμούς.

Απαντήθηκε 19/08/2016 στις 22:44
πηγή χρήστη

ψήφοι
2

Θα δούμε για μια υπάρχουσα χαρτογράφηση των 3rd party JS βιβλιοθήκες που υποστηρίζουν Σενάριο # ή SharpKit. Οι χρήστες αυτών των C # για να .js cross compilers θα έχετε αντιμετωπίσει το πρόβλημα που αντιμετωπίζουμε τώρα και θα μπορούσαν να έχουν δημοσιεύσει ένα ανοικτό πρόγραμμα πηγής για τη σάρωση 3rd party lib σας και να μετατρέψει σε σκελετό Γ τάξεων #. Αν ναι χαράξει το πρόγραμμα σαρωτή για τη δημιουργία γραφομηχανή στη θέση της C #.

Σε αντίθετη περίπτωση, μεταφράζοντας ένα C # δημόσια διεπαφή για 3rd party lib σας σε ορισμούς γραφομηχανή θα μπορούσε να είναι πιο απλό από ό, τι κάνει το ίδιο με την ανάγνωση του κώδικα JavaScript.

Ιδιαίτερο ενδιαφέρον μου είναι πλαίσιο ExtJS RIA Sencha και ξέρω ότι εκεί έχουν έργα που δημοσιεύθηκε για να δημιουργήσει ένα C # ερμηνεία για Σενάριο # ή SharpKit

Απαντήθηκε 04/10/2012 στις 18:37
πηγή χρήστη

ψήφοι
0

Όταν δημιουργείτε τη δική σας βιβλιοθήκη, μπορείτε να μπορεί να δημιουργήσει *.d.tsαρχεία χρησιμοποιώντας την tscεντολή (γραφομηχανή Compiler) όπως έτσι: (υποθέτοντας ότι χτίζετε τη βιβλιοθήκη σας στο dist/libφάκελο)

tsc -d --declarationDir dist/lib --declarationMap --emitDeclarationOnly
  • -d( --declaration): Δημιουργεί τα *.d.tsαρχεία
  • --declarationDir dist/lib: Κατάλογος εξόδου για τα αρχεία που δημιουργούνται δήλωση.
  • --declarationMap: Δημιουργεί ένα sourcemap για κάθε αντίστοιχο αρχείο».d.ts'.
  • --emitDeclarationOnly: Μόνο εκπέμπουν τα αρχεία δήλωση».d.ts'. (Αριθ καταρτίζονται JS)

(δείτε τα έγγραφα για όλες τις επιλογές της γραμμής εντολών μεταγλώττισης)

Ή, για παράδειγμα, που σου package.json:

"scripts": {
    "build:types": "tsc -d --declarationDir dist/lib --declarationMap --emitDeclarationOnly",
}

και στη συνέχεια, εκτελέστε: yarn build:typesnpm run build:types)

Απαντήθηκε 23/09/2019 στις 19:24
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more