簡體   English   中英

Typescript聲明順序觸發運行時錯誤

[英]Typescript declaration order triggers runtime error

在搜索我遇到的問題時,我發現聲稱類的聲明順序在Typescript中無關緊要 ,並且“前向聲明”不是必需的。

在我正在審查的項目中,這種說法似乎並沒有成功。 我將問題分解為一個簡單的可重現的示例,即使編譯器沒有抱怨,我們也會在運行時失敗:

$ cat bug.ts
class A extends B {
    constructor(public id:number) {
        super(id);
        console.log("A():" + id);
    }
}

class B {
    constructor(public id:number) {
        console.log("B():" + id);
    }
}

var a = new A(12);

$ tsc  bug.ts
$ node  bug.js

/home/ttsiod/work/a/bug.js:4
    __.prototype = b.prototype;
                    ^
TypeError: Cannot read property 'prototype' of undefined
    at __extends (/home/ttsiod/work/a/bug.js:4:21)
    at /home/ttsiod/work/a/bug.js:8:5
    at Object.<anonymous> (/home/ttsiod/work/a/bug.js:15:3)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:901:3

要么我錯過了一個我不知道的關鍵詞,要么“聲明順序不重要”並不像人們想象的那樣通用。

我對繼承很重要。 只要它使用之前 定義 沒關系,這就是你提到的鏈接中的情況。

對於繼承,B必須在A之前定義,以便A可以從B的原型中復制成員。

此外,“聲明”(訂單從不重要)和“定義”之間存在區別,其中訂單幾乎總是重要的,除了吊裝http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html等案例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM