Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 将接口作为参数传递时出现问题_Typescript - Fatal编程技术网

Typescript 将接口作为参数传递时出现问题

Typescript 将接口作为参数传递时出现问题,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"

我不熟悉打字脚本(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);
工作正常;我可以编译并执行它


我做错什么了吗?有人能帮忙吗?

这是预期的行为。您可以使用强制转换来解决此问题:

interfaceTester(<SomeInterface>{someOneElse: 45, label:"Label value with one extra argument;"});
interfaceTester({someonether:45,label:“label value with one-extra-argument;”});

您可以找到有关它为何以这种方式工作的文档。

这是预期的行为。您可以使用强制转换来解决此问题:

interfaceTester(<SomeInterface>{someOneElse: 45, label:"Label value with one extra argument;"});
interfaceTester({someonether:45,label:“label value with one-extra-argument;”});
您可以找到有关它为何以这种方式工作的文档

在构建时,编译器将obj视为接口(SomeInterface)的类型any。这假设编译器将变量视为动态变量

要限制此操作,应指定数据类型

 let obj: SomeInterface = { someOneElse: 45, label: "Label value with one extra argument;" };
这将导致生成错误

在构建时,编译器将obj视为接口(SomeInterface)的类型any。这假设编译器将变量视为动态变量

要限制此操作,应指定数据类型

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

这将导致生成错误

谢谢你的回答,效果很好。但我仍然感到困惑的是,在这两种情况下(工作或不工作),我都没有指定任何关于接口的内容(
SomeInterface
)。唯一的区别是,在工作情况下,它被分配给一个变量。那么编译器是如何知道这个(
SomeInterface
)接口的呢?谢谢你的回答,这很好。但我仍然感到困惑的是,在这两种情况下(工作或不工作),我都没有指定任何关于接口的内容(
SomeInterface
)。唯一的区别是,在工作情况下,它被分配给一个变量。那么编译器是如何知道这个(
SomeInterface
)接口的呢?