You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中访问myStackObj.isProd报错,如何正确访问接口属性?

问题原因及解决方法

你的代码问题在于:MyStack类仅在构造函数中接收了props参数,但没有将props里的isProd存储为类的实例属性,所以实例myStackObj根本不存在isProd这个可访问的属性。

修正方案1:显式声明实例属性并赋值

最直观的写法,先在类里声明对应属性,再在构造函数中把传入的isProd赋值给它:

interface MyStackProps {
    readonly isProd?: boolean;
}

class MyStack {
    // 声明与props匹配的实例属性(可选、只读)
    readonly isProd?: boolean;

    constructor(props?: MyStackProps){
        // 用可选链处理props可能为undefined的情况
        this.isProd = props?.isProd;
    }
}

let myStackObj = new MyStack({isProd: true});
myStackObj.isProd; // 现在可正常访问,值为true

修正方案2:使用TypeScript参数属性语法(简洁写法)

TypeScript支持在构造函数参数前添加修饰符(如readonly),自动将参数转为实例属性:

interface MyStackProps {
    readonly isProd?: boolean;
}

class MyStack {
    // 直接将props参数转为实例的只读属性
    constructor(readonly props?: MyStackProps){
    }
}

let myStackObj = new MyStack({isProd: true});
myStackObj.props?.isProd; // 通过props属性访问isProd

修正方案3:解构参数直接提取isProd

如果不想通过props层级访问,可在构造函数中解构参数:

interface MyStackProps {
    readonly isProd?: boolean;
}

class MyStack {
    readonly isProd?: boolean;

    // 解构props,默认空对象避免无参数时报错
    constructor({isProd}: MyStackProps = {}){
        this.isProd = isProd;
    }
}

let myStackObj = new MyStack({isProd: true});
myStackObj.isProd; // 直接访问isProd属性

内容的提问来源于stack exchange,提问作者Gigi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 17:27:10