gpt4 book ai didi

typescript - 为什么在这种情况下接口(interface)不保护我?

转载 作者:搜寻专家 更新时间:2023-10-30 21:40:59 24 4
gpt4 key购买 nike

interface IA {
readonly a: string;
f(x: string): void;
}

class X implements IA {
a;
f(x) {
this.a = 1;
}
}

let x = new X().a;

令人惊讶的是,这段代码可以编译。

  • 它将X.a 的类型推断为any,这是为什么呢?
  • readonly 似乎不能保护我不修改 a.我用错了吗?

更新

https://github.com/Microsoft/TypeScript/issues/11578

最佳答案

几乎所有非类型化变量都隐含地是 any。您可以在编译器选项中禁用它:

  "noImplicitAny": true

此时您必须定义一个可以分配给基本接口(interface)类型的类型。

enter image description here

至于只读。它按预期工作:

enter image description here

您必须了解 typescript 和其他面向对象语言(如 C#)之间存在一些差异。也就是说,将一个类型变量赋值给另一个类型变量完全取决于右侧类型是否与左侧类型相交。即

let x: X = { a: "hello", f: (x) => { } };

完全有效。

关于typescript - 为什么在这种情况下接口(interface)不保护我?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40412859/

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