即使我将其导出为 TypeScript 中自己的类型,也无法访问子类属性
Posted
技术标签:
【中文标题】即使我将其导出为 TypeScript 中自己的类型,也无法访问子类属性【英文标题】:Cannot access subclass properties even when I export it as it's own type in TypeScript 【发布时间】:2021-09-06 13:44:07 【问题描述】:目前我无法访问“Eagle”类的任何属性。我已经导入了我的“AnyBird”类型,但是当我尝试使用特定“Eagle”的属性时,它根本无法识别。它只能看到“鸟”的属性。
我会说“只需将 Eagle 作为类型导入”,但我还需要接受其他更专业的类型。比如“鸽子”、“皮琴”、“鸡”。它需要可扩展,所以我想连接“AnyBird”下的所有类型。
非常感谢您的帮助!
export type AnyBird = Bird | Eagle ;
export interface Eagle extends Bird
energyGain: number;
heatGain: number;
energyCost: number;
heatCost: number;
export interface Bird
id: number;
job: number;
jobSpecificId: number;
level: number;
我会在一个单独的文件中举例:
import AnyBird from './common/skills/SpecialBirdsFile';
interface Props
someBird: AnyBird;
export default class BirdThing extends Component<Props, State>
state =
render()
let someBird = this.props;
<div>
allBirds.id <-- WORKS!!!!!!
allBirds.energyGain <---- FAILS! Cannot be found.
</div>
【问题讨论】:
这可能会有所帮助catchts.com/unions 【参考方案1】:因为您使用的是联合类型,其中一种类型是另一种类型的超集,解决此问题的一种方法是在您使用对象时检查它是哪种类型。
例如,您可以编写一个名为isEagle
的函数,实现如下:
function isEagle(obj: any): obj is Eagle
// however you'd check if this is an "Eagle" object. Ex:
return obj.hasOwnProperty('energyGain')
要使用Eagle
上的属性,您可以这样调用您的函数:
const myBird: AnyBird = ... ;
if (isEagle(myBird))
// properties of Eagle are available here
else
// Just a base Bird object.
【讨论】:
以上是关于即使我将其导出为 TypeScript 中自己的类型,也无法访问子类属性的主要内容,如果未能解决你的问题,请参考以下文章
TypeScript:用自己的类扩展 Express.Session 接口