接口上不存在属性

时间:2019-02-28 06:57:16

标签: angular typescript

我对接口在TypeScript中的工作方式感到困惑。

这是一大段代码:

interface test1 {
}

class test2 implements test1
{
    public foo;
}

let test: test1 = new test2();

test.foo = 'test';

它不会编译并显示错误消息“类型1上不存在属性foo。这是否意味着在TypeScript中实现接口时,只能使用在接口中声明的属性和方法?

我很困惑,因为我已经习惯了PHP,这不会在PHP中引起任何错误。

3 个答案:

答案 0 :(得分:2)

  

那么这是否意味着在TypeScript中实现接口时,只能使用在接口中声明的属性和方法?

不。这意味着当您在TypeScript中使用特定接口引用变量时,只能使用在变量接口中声明的属性和方法。

这是OOP中的一般概念。

答案 1 :(得分:1)

let test: test1 = new test2();

test.foo = 'test';

您正在将test1分配为test变量的类型,test1接口中没有foo属性。因此,这就是您收到此错误的原因。如果将类型更改为let test: test2: new test2();。它不会抛出任何错误:

let test: test2 = new test2();

test.foo = 'test';

答案 2 :(得分:0)

在这里考虑两件事

  1. 如果要初始化变量,则无需提供类型。
interface test1 { }
class test2 implements test1{
    public foo;
}
let test = new test2();
test.foo = 'test';
  1. 如果您仍要在初始化值之前设置类型,则可以使用“选项”。

选项1

interface test1 { }
class test2 implements test1{
    public foo;
}
let test: test2 = new test2();
test.foo = 'test';

选项2

interface test1 { }
class test2 implements test1{
    public foo;
}
let test: test1 | any = new test2();
test.foo = 'test';