gpt4 book ai didi

javascript - 如何在 tsc 从 .js 文件生成的类型定义中包含继承的属性?

转载 作者:行者123 更新时间:2023-12-05 05:39:46 25 4
gpt4 key购买 nike

我正在尝试通过 .d.ts 文件向 vanilla javascript 库添加 typescript 支持。我正在尝试使用“tsc”命令生成这些类型定义文件,但我遇到了很多“类型‘typeName’上不存在属性‘propertyName’”的错误。

当该函数仅在其父类的代码中定义时,这发生在试图调用子类实例上的函数的行上。看起来虽然 JSDoc 能够通过在子类的 JSDoc 注释中使用“@extends”来推断继承的函数,但 tsc 不能。

例如:

ParentClass.js

/**
* This is the parent class.
*
* @class
*/
export class ParentClass {
parentFunction(){
console.log("Running parent function");
}
}

childClass.js

/**
* This is a child class.
*
* @class
* @extends {ParentClass}
*/

import {ParentClass} from "./ParentClass";

class ChildClass extends ParentClass {
// ChildClass vars and functions here
}

program.ts

import {ChildClass} from "./ChildClass";

let cc = new ChildClass();
cc.parentFunction();

尝试编译代码时,tsc 将抛出此错误:

error TS2339: Property 'parentFunction' does not exist on type'ChildClass'.

有什么办法可以解决这个问题吗?如果没有办法让 typescript 编译器识别继承的属性,有没有办法让 tsc 忽略这个问题,这样它至少可以完成类型定义文件的生成,并允许我手动将缺少的属性添加到相应的子类类型定义?

最佳答案

您忘记导入 childClass.jsprogram.js 上的其他文件。它应该是这样的:


ParentClass.js

/**
* This is the parent class.
*
* @class
*/
export class ParentClass {
parentFunction(){
console.log("Running parent function");
}
}

childClass.js

import { ParentClass } from './ParentClass'

/**
* This is a child class.
*
* @class
* @extends {ParentClass}
*/
export class ChildClass extends ParentClass {
// ChildClass vars and functions here
}

program.js

import { ChildClass } from './childClass'

let cc = new ChildClass();
cc.parentFunction();

关于javascript - 如何在 tsc 从 .js 文件生成的类型定义中包含继承的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72588687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com