У меня есть следующий HTML + TypeScript, который пытается создать экземпляр простого класса Point. При переходе по гиперссылке, я получаю следующие ошибки против каждой попытку пункта/улова:Ошибка времени выполнения TypeScript 'undefined'
Ошибки:
- Не может прочитать свойство «Empty» неопределенные.
- undefined не является функцией.
- undefined не является функцией.
HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>TypeScript HTML App</title>
<script src="app.js"></script>
<script type="text/javascript">
function Test()
{
try { alert(MyLibrary.Point.Empty.ToString()); }
catch (e) { alert(e.message); }
try { alert(new MyLibrary.Point(10, 20).ToString()); }
catch (e) { alert(e.message); }
try { alert(MyLibrary.Point.FromPoint(new MyLibrary.Point(10, 20)).ToString()); }
catch (e) { alert(e.message); }
}
</script>
</head>
<body>
<a href="javascript:Test();">Click Me</a>
</body>
</html>
Машинопись:
module MyLibrary
{
export interface IPoint { X: number; Y: number; ToString(): string; }
export class Point implements MyLibrary.IPoint
{
private _X: number = 0;
private _Y: number = 0;
constructor(x: number, y: number)
{
this._X = x;
this._Y = y;
}
public get X(): number { return (this._X); }
public get Y(): number { return (this._Y); }
public ToString(): string
{
return ("{" + this._X.toString() + "," + this._Y.toString() + "}");
}
public static FromPoint(point: MyLibrary.Point): MyLibrary.Point
{
return (new MyLibrary.Point(point.X, point.Y));
}
private static _Empty: MyLibrary.Point = new MyLibrary.Point(0, 0);
public static get Empty(): MyLibrary.Point { return (MyLibrary.Point._Empty); }
}
}
машинописи отлично компилируется и проект нацелен на ECMA5. Не уверен, что происходит под капотом.
UPDATE: Код начинает работать, если я удаляю статические свойства из класса. Любые идеи, почему это так? генерируемый JavaScript для статических свойств выглядит следующим образом:
Object.defineProperty(Point, "Empty", {
get: function()
{
return (MyLibrary.Point._Empty);
},
enumerable: true,
configurable: true
});
Point._Empty = new MyLibrary.Point(0, 0);
Вот несколько способов управления вашим проектом TypeScript, чтобы вы не получили неопределенные значения: http://www.youtube.com/watch?v=KDrWLMUY0R0&hd=1 – basarat
@basarat: У меня нет доступа к YouTube. Это видео доступно в другом месте? Возможно, я найду его, если вы скажете мне название. Благодарю. –
Извините, что название «Модули TypeScript Demystified: Internal, AMD с RequireJS, CommonJS с NodeJS» – basarat