Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TypeScript运行时错误';未定义';_Javascript_.net_Runtime Error_Typescript - Fatal编程技术网

Javascript TypeScript运行时错误';未定义';

Javascript TypeScript运行时错误';未定义';,javascript,.net,runtime-error,typescript,Javascript,.net,Runtime Error,Typescript,我有下面的HTML+TypeScript,它试图实例化一个名为Point的简单类。单击超链接时,我对每个try/catch子句都会出现以下错误: 错误: <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>TypeScript HTML App</title> <script src="app.js"&

我有下面的HTML+TypeScript,它试图实例化一个名为Point的简单类。单击超链接时,我对每个try/catch子句都会出现以下错误:

错误:

<!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); }
    }
}
  • 无法读取未定义的属性“Empty”
  • 未定义不是一个函数
  • 未定义不是一个函数
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); }
    }
}
TypeScript编译得很好,项目的目标是ECMA5。不知道引擎盖下面发生了什么

更新:如果我从类中删除静态属性,代码将开始工作。你知道为什么吗?为静态属性生成的JavaScript如下所示:

Object.defineProperty(Point, "Empty", {
    get: function ()
    {
        return (MyLibrary.Point._Empty);
    },
    enumerable: true,
    configurable: true
});
Point._Empty = new MyLibrary.Point(0, 0);

从错误消息判断,模块MyLibrary是在运行时定义的,但其中的类点不是。我猜JS文件点是在没有被加载


因为您没有使用模块,所以每个包含要使用的类的JS文件都必须在HTML文件的顶部引用。考虑使用<代码> -out文件< /代码>编译选项将所有类编译成单个文件,以便只需要引用一个文件。

从错误消息中判断,模块MyLoin在运行时被定义,但其内部的类点不是。我猜JS文件点是在没有被加载


因为您没有使用模块,所以每个包含要使用的类的JS文件都必须在HTML文件的顶部引用。考虑使用<代码> -out文件< /代码>编译选项将所有类编译成单个文件,以便只需要引用一个文件。

从错误消息中判断,模块MyLoin在运行时被定义,但其内部的类点不是。我猜JS文件点是在没有被加载


因为您没有使用模块,所以每个包含要使用的类的JS文件都必须在HTML文件的顶部引用。考虑使用<代码> -out文件< /代码>编译选项将所有类编译成单个文件,以便只需要引用一个文件。

从错误消息中判断,模块MyLoin在运行时被定义,但其内部的类点不是。我猜JS文件点是在没有被加载


因为您没有使用模块,所以每个包含要使用的类的JS文件都必须在HTML文件的顶部引用。考虑使用<代码> -out文件< /Cord>编译选项将所有类编译成单个文件,以便只需要引用一个文件。

在其静态成员初始化期间,不能引用模块内类的限定名——该名称尚未可用。更改这两行:

    private static _Empty: MyLibrary.Point = new MyLibrary.Point(0, 0);
    public static get Empty(): MyLibrary.Point { return (MyLibrary.Point._Empty); }
对此

    private static _Empty: MyLibrary.Point = new Point(0, 0);
    public static get Empty(): MyLibrary.Point { return (Point._Empty); }

如果检查生成的代码,您可以看到属性
MyLibrary.Point
仅在类的静态初始化发生后设置。这可能被认为是一个编译器错误。

在初始化模块的静态成员时,您不能在模块内引用类的限定名称,因为该类尚未使用该名称。更改这两行:

    private static _Empty: MyLibrary.Point = new MyLibrary.Point(0, 0);
    public static get Empty(): MyLibrary.Point { return (MyLibrary.Point._Empty); }
对此

    private static _Empty: MyLibrary.Point = new Point(0, 0);
    public static get Empty(): MyLibrary.Point { return (Point._Empty); }

如果检查生成的代码,您可以看到属性
MyLibrary.Point
仅在类的静态初始化发生后设置。这可能被认为是一个编译器错误。

在初始化模块的静态成员时,您不能在模块内引用类的限定名称,因为该类尚未使用该名称。更改这两行:

    private static _Empty: MyLibrary.Point = new MyLibrary.Point(0, 0);
    public static get Empty(): MyLibrary.Point { return (MyLibrary.Point._Empty); }
对此

    private static _Empty: MyLibrary.Point = new Point(0, 0);
    public static get Empty(): MyLibrary.Point { return (Point._Empty); }

如果检查生成的代码,您可以看到属性
MyLibrary.Point
仅在类的静态初始化发生后设置。这可能被认为是一个编译器错误。

在初始化模块的静态成员时,您不能在模块内引用类的限定名称,因为该类尚未使用该名称。更改这两行:

    private static _Empty: MyLibrary.Point = new MyLibrary.Point(0, 0);
    public static get Empty(): MyLibrary.Point { return (MyLibrary.Point._Empty); }
对此

    private static _Empty: MyLibrary.Point = new Point(0, 0);
    public static get Empty(): MyLibrary.Point { return (Point._Empty); }


如果检查生成的代码,您可以看到属性
MyLibrary.Point
仅在类的静态初始化发生后设置。这可能被认为是一个编译器错误。

以下是管理TypeScript项目的各种方法,这样您就不会未定义:@basarat:我没有访问YouTube的权限。这段视频在别处有吗?如果你告诉我标题,我可能会找到它。谢谢。很抱歉听到这个消息,标题是“TypeScript模块去神秘化:内部,AMD与RequireJS,CommonJS与NodeJS”。下面是管理您的TypeScript项目的各种方法,这样您就不会被未定义:@basarat:我没有访问YouTube的权限。这段视频在别处有吗?如果你告诉我标题,我可能会找到它。谢谢。很抱歉听到这个消息,标题是“TypeScript模块去神秘化:内部,AMD与RequireJS,CommonJS与NodeJS”。下面是管理您的TypeScript项目的各种方法,这样您就不会被未定义:@basarat:我没有访问YouTube的权限。这段视频在别处有吗?如果你告诉我标题,我可能会找到它。谢谢。很抱歉听到这个消息,标题是“TypeScript模块去神秘化:内部,AMD与RequireJS,CommonJS与NodeJS”。下面是管理您的TypeScript项目的各种方法,这样您就不会被未定义:@basarat:我没有访问YouTube的权限。这段视频在别处有吗?如果你告诉我标题,我可能会找到它。谢谢。很抱歉听到这个消息,标题是“TypeScript Modules Demystified:Internal,AMD with RequireJS,CommonJS with NodeJS”。谢谢,但我认为情况并非如此,因为我可以在浏览器源代码视图中导航到
app.js
文件。奇怪的是,当我从类中删除静态属性
Empty
时,代码开始工作。有什么想法吗?请看问题末尾的更新。我已经包含了为静态属性生成的JavaScript,以防它有所帮助