将接口作为参数传递时遇到麻烦

时间:2016-05-11 09:23:59

标签: typescript

我是TypeScript(版本1.8.10)的新手。我有这个代码;

interface SomeInterface {
    label: string;  
}

function interfaceTester(arg: SomeInterface){
    console.log("This is the interface tester's argument : ", arg.label);
}

//working
interfaceTester({label:"Label value alone"});

但是,当我尝试使用附加参数的代码时,

interfaceTester({someOneElse: 45, label:"Label value with one extra argument;"});

无法正常工作;它抛出编译错误;

相反,当我以这种方式尝试相同的(我相信)时:

let obj = {someOneElse: 45, label:"Label value with one extra argument;" };

interfaceTester(obj);

工作正常;我可以编译并执行它。

我做错了吗?有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

   let obj = {someOneElse: 45, label:"Label value with one extra argument;" };

虽然构建编译器将obj视为任何类型而非特定类型的接口(SomeInterface)。这假定编译器将变量视为动态变量。

要限制此项,您应指定数据类型。

 let obj: SomeInterface = { someOneElse: 45, label: "Label value with one extra argument;" };

这将给出构建错误。

答案 1 :(得分:0)

这是预期的行为。您可以使用演员解决它:

for

您可以通过here找到有关其工作原理的文档。