我对接口在TypeScript中的工作方式感到困惑。
这是一大段代码:
interface test1 {
}
class test2 implements test1
{
public foo;
}
let test: test1 = new test2();
test.foo = 'test';
它不会编译并显示错误消息“类型1上不存在属性foo。这是否意味着在TypeScript中实现接口时,只能使用在接口中声明的属性和方法?
我很困惑,因为我已经习惯了PHP,这不会在PHP中引起任何错误。
答案 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)
在这里考虑两件事
interface test1 { } class test2 implements test1{ public foo; } let test = new test2(); test.foo = 'test';
选项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';