当前位置: 首页 > 知识库问答 >
问题:

没有二传手的属性的打字稿接口签名。

通鸿风
2023-03-14

比方说,我们班有一个典型的吸气剂

class Employee implements IEmployee {
    private _fullName: string;

    get fullName(): string {
        return this._fullName;
    }
}

以及使用它的界面

interface IEmployee{
     fullName: string; 
}

通过此接口处理实例时,如果我们尝试分配给 fullName,编译器不会警告我们缺少 setter,并且 JS 运行时只是吞下任何赋值并且不会抛出错误。有没有办法将接口成员标记为只有 getter 或只有 setter?

我看过这个帖子,但它很旧了,我想知道,如果有什么改进。

共有2个答案

满昊然
2023-03-14

这是一个有趣的问题。在TypeScript中,只读属性的概念与其他语言略有不同。

在许多语言中,如果您试图设置带有getter(但没有setter)的属性,则该属性会引发编译器错误,但TypeScript不会。

该属性仍然是只读的,因为如果您试图设置它,没有任何区别;设置会无声无息地失败。

下面是一个没有任何接口的示例:

class Example {
    get name() {
        return 'Steve';
    }
}

var y = new Example();
y.name = 'Example 2';
alert(y.name);

当我使用<code>x时,没有编译器警告。name=“示例2”

如果有编译器警告,我随后会期望有一种方法可以在接口中指定属性的只读性。正如您所期望的那样,鉴于上述信息,您无法在接口上设置只读属性。

interface Test {
    name: string;
}

class Example {
    get name() {
        return 'Steve';
    }
}

var x: Test = new Example();
x.name = 'Example 1';
alert(x.name);

var y = new Example();
x.name = 'Example 2';
alert(x.name);

这意味着您只能通过使用一个方法来获取属性的值来强制只读(显然没有允许设置该值的方法)。

interface Test {
    getName: () => string;
}

class Example {
    getName() {
        return 'Steve';
    }
}

var x: Test = new Example();
//x.getName('Obviously not');
//x.getName() = 'Obviously not';
alert(x.getName());

var y = new Example();
//y.getName('Obviously not');
//y.getName() = 'Obviously not';
alert(y.getName());
乌骏
2023-03-14

打字稿中的属性现在可以具有“只读”修饰符,从而实现所需的 restult。

interface IEmployee{
    readonly fullName: string; 
}
 类似资料:
  • 问题内容: 我收到了不兼容的呼叫签名错误,并且不知道该怎么做才能使其正常工作。 反应态 类别声明 getMethod返回类别 return-Method(反应),这是发生错误的地方: 错误消息:TS2349:无法调用其类型缺少呼叫签名的表达式。类型’(((callbackfn:(值:Cat1,索引:数字,数组:Cat1 [])=> U,thisArg ?: any)=> U [] | …’没有兼容

  • 我已经在我的.html文件中定义了这些: 然后在test.js: 但Typescript错误地指出:“找不到名称‘树’” 我也尝试编译与和放置在test.js文件的顶部,但它再次出错:

  • 我正在学习Typescript,并尝试实现一个简单的React/Redux应用程序。当我使用同步操作时,它工作得很好,但问题在于异步操作。我正在学习官方的redux教程。 首先,我宣布会议状态 然后我为这个动作声明接口 我使用联合类型导出它们

  • 问题内容: 我正在获取一个json响应并将其存储在mongodb中,但是我不需要的字段也正在进入数据库中,是否仍要剥离unseccary字段? 输出: 问题答案: 您可以使用从给定对象中选取某些属性的函数: 然后:

  • 假设有一个类库X的输入文件,其中包含一些接口。 为了使用这个库,我需要传递一个与。当然,我可以在源文件中创建相同的接口: 但这样一来,我就有了让它和库中的一个保持最新的负担,而且它可能非常大,并导致大量代码重复。 因此,有没有办法“提取”接口的这个特定属性的类型?类似于(这不起作用,导致“找不到名称I2”错误)。 编辑:在TS操场上玩了一会儿后,我注意到以下代码完全实现了我想要的: 但是,它需要声

  • 问题内容: npm软件包允许我们在TypeScript应用程序内部使用React。我们将组件定义为 在这里,我们必须声明组件属性和状态的类型(在类型变量中)。 在声明了这些类型之后,TypeScript将使用该类型来验证组件的用法(传递给它的道具的形状)。 我想围绕这样的组件创建一个容器。容器将重复使用组件的道具。但是,为了创建具有相同道具的另一个组件,我必须再次重新声明道具的类型。或从原始组件文