TypeScript: referera till resigs extend
Jag försöker referera till befintlig kod som använder Resigs 'extend', men jag får en massa fel
------ test.ts --------
/// <reference path="myclass.js" />
var m = new MyClass (3);
------ myclass.js --------
/// <reference path="class.js" />
var MyClass = Class.extend({
init: function (i)
{
this.i = i;
},
})
------ class.js --------
(copied from http://ejohn.org/blog/simple-javascript-inheritance/)
fel :
Supplied parameters do not match any signature of call target
The name 'Class' does not exist in the current scope
The property 'extend' does not exist on value of type '() => void'
The name 'Class' does not exist in the current scope
Jag inser att jag så småningom skulle vilja skriva om den extend-baserade koden till TypeScript, men tills dess, hur refererar jag till den från ny kod?
Jag antar att detta väcker en djupare fråga - varför klagar det på typfel i befintlig JavaScript-kod?
Svar #1
TypeScript kan vanligtvis inte härleda typer från extern JavaScript-kod.
Du behöver deklarera formen på koden 'extend' som du anropar så att TypeScript vet vilken form typen har:
declare class Class {
static extend(body: any);
}
Du kan antingen lägga det direkt i din källfil (om du bara har ett projekt med en enda fil), eller mer korrekt, i en '.d.ts'-fil som du refererar till från dina källfiler.
