typescript - 对于一个接口,这两种方式有什么区别?
问题描述
为什么这两篇著作有不同的结果?
PS:没有任何 tsconfig 设置。
interface LabelledValue {
label: string;
}
interface LabelledValue1 {
size: number;
label: string;
}
function printLabel(labelledObj: LabelledValue) {
console.log(labelledObj.label);
}
printLabel({ size: 10, label: "Size 10 Object" });
let myObj: LabelledValue1 = { size: 10, label: "Size 10 Object" };
printLabel(myObj);
在 上parintLabel({})
,我们得到一个 TypeError:
'{ size: number; 类型的参数 标签:字符串;}' 不可分配给“LabelledValue”类型的参数。
对象字面量只能指定已知属性,并且在类型“LabelledValue”中不存在“大小”.ts(2345)
解决方案
这是因为在您的第一个 printlabel 中,您的对象是“any”类型,因此编译器不会检查类型是否正确。
官方文档:https ://www.typescriptlang.org/docs/handbook/basic-types.html#any
如果您使用该接口,编译器能够检查对象是否与定义匹配。
推荐阅读
- react-native - 调用 pop 以路由 NavigatorIOS 中不存在的路由以响应本机
- sql - Sqlcmd:错误:Microsoft ODBC Driver 11 for SQL Server:用户“sa”登录失败
- docker - 构建 Dockerfile 时可以使用 Docker 标签吗?
- bash - PS1 中的命令替换不会在应该更新的时候更新;缓存输出?
- c++ - Qt QImage 显示错误的灰度图像
- python-3.x - 在 Anaconda 环境中安装 Arcpy
- python - Tensorflow 中的“称为终止的纯虚拟方法”
- javascript - 在 react redux 中从 dispatch 导航到 athor 页面
- php - 将 XML 文件保存在网络位置
- javascript - 无法使用数据表读取未定义的属性“单元格”