TS 文档提供的小型编译 Typescript 代码崩溃
Small compiled Typescript code provided from TS documentation crashes
我一直在关注 Typescript 的手册,但脚本在您可以在此处找到的代码示例中崩溃:
https://www.typescriptlang.org/docs/handbook/classes.html#parameter-properties
谁能帮我解决这个问题?
{
class BeeKeeper {
hasMask: boolean;
}
class ZooKeeper {
nametag: string;
}
class Animal {
numLegs: number;
}
class Bee extends Animal {
keeper: BeeKeeper;
}
class Lion extends Animal {
keeper: ZooKeeper;
}
function createInstance<A extends Animal>(c: new () => A): A {
return new c();
}
createInstance(Lion).keeper.nametag; // typechecks!
// createInstance(Lion).keeper.hasMask; // error!
createInstance(Bee).keeper.hasMask; // typechecks!
}
这是用TS编译的代码块:
{
var createInstance = function createInstance(c) {
return new c();
};
var BeeKeeper = function BeeKeeper() {
_classCallCheck(this, BeeKeeper);
};
var ZooKeeper = function ZooKeeper() {
_classCallCheck(this, ZooKeeper);
};
var _Animal12 = function _Animal12() {
_classCallCheck(this, _Animal12);
};
var Bee = function (_Animal13) {
_inherits(Bee, _Animal13);
function Bee() {
_classCallCheck(this, Bee);
return _possibleConstructorReturn(this, (Bee.__proto__ || Object.getPrototypeOf(Bee)).apply(this, arguments));
}
return Bee;
}(_Animal12);
var Lion = function (_Animal14) {
_inherits(Lion, _Animal14);
function Lion() {
_classCallCheck(this, Lion);
return _possibleConstructorReturn(this, (Lion.__proto__ || Object.getPrototypeOf(Lion)).apply(this, arguments));
}
return Lion;
}(_Animal12);
createInstance(Lion).keeper.nametag; // typechecks! <- THIS CRASHES
// createInstance(Lion).keeper.hasMask; // error!
createInstance(Bee).keeper.hasMask; // typechecks!
}
这也是错误的堆栈:
Uncaught TypeError: Cannot read property 'nametag' of undefined
at Object.2../greet (main.ts:1451)
at s (_prelude.js:1)
at e (_prelude.js:1)
at _prelude.js:1
该示例旨在展示打字行为,并非完整的 运行 可用程序。您遇到的问题是由 keeper
字段未在 class 中初始化这一事实引起的。要达到 运行,请尝试以下操作:
class Bee extends Animal {
keeper: BeeKeeper = new BeeKeeper();
}
class Lion extends Animal {
keeper: ZooKeeper = new ZooKeeper();
}
我一直在关注 Typescript 的手册,但脚本在您可以在此处找到的代码示例中崩溃:
https://www.typescriptlang.org/docs/handbook/classes.html#parameter-properties
谁能帮我解决这个问题?
{
class BeeKeeper {
hasMask: boolean;
}
class ZooKeeper {
nametag: string;
}
class Animal {
numLegs: number;
}
class Bee extends Animal {
keeper: BeeKeeper;
}
class Lion extends Animal {
keeper: ZooKeeper;
}
function createInstance<A extends Animal>(c: new () => A): A {
return new c();
}
createInstance(Lion).keeper.nametag; // typechecks!
// createInstance(Lion).keeper.hasMask; // error!
createInstance(Bee).keeper.hasMask; // typechecks!
}
这是用TS编译的代码块:
{
var createInstance = function createInstance(c) {
return new c();
};
var BeeKeeper = function BeeKeeper() {
_classCallCheck(this, BeeKeeper);
};
var ZooKeeper = function ZooKeeper() {
_classCallCheck(this, ZooKeeper);
};
var _Animal12 = function _Animal12() {
_classCallCheck(this, _Animal12);
};
var Bee = function (_Animal13) {
_inherits(Bee, _Animal13);
function Bee() {
_classCallCheck(this, Bee);
return _possibleConstructorReturn(this, (Bee.__proto__ || Object.getPrototypeOf(Bee)).apply(this, arguments));
}
return Bee;
}(_Animal12);
var Lion = function (_Animal14) {
_inherits(Lion, _Animal14);
function Lion() {
_classCallCheck(this, Lion);
return _possibleConstructorReturn(this, (Lion.__proto__ || Object.getPrototypeOf(Lion)).apply(this, arguments));
}
return Lion;
}(_Animal12);
createInstance(Lion).keeper.nametag; // typechecks! <- THIS CRASHES
// createInstance(Lion).keeper.hasMask; // error!
createInstance(Bee).keeper.hasMask; // typechecks!
}
这也是错误的堆栈:
Uncaught TypeError: Cannot read property 'nametag' of undefined
at Object.2../greet (main.ts:1451)
at s (_prelude.js:1)
at e (_prelude.js:1)
at _prelude.js:1
该示例旨在展示打字行为,并非完整的 运行 可用程序。您遇到的问题是由 keeper
字段未在 class 中初始化这一事实引起的。要达到 运行,请尝试以下操作:
class Bee extends Animal {
keeper: BeeKeeper = new BeeKeeper();
}
class Lion extends Animal {
keeper: ZooKeeper = new ZooKeeper();
}