当我有一个只有一个字段的接口(val)
interface ValObj {
val: number
}
Run Code Online (Sandbox Code Playgroud)
使用另一个字段创建对象会产生错误.
const someObj: ValObj = {
val: 5,
someStr:"hello"
}
Run Code Online (Sandbox Code Playgroud)
但是当我们从函数返回一个值时,这个原则并不一致.定义一个函数来返回相同的接口,并返回相同的对象.
const func: () => ValObj =
() => ({
val: 5,
someStr: "sdf"
})
Run Code Online (Sandbox Code Playgroud)
为什么Typescript的类型检查允许这个?它有什么办法吗?
您在第一个示例中看到的错误是超额财产检查的结果.仅当将对象文字直接分配给给定类型的某些内容时,才会检查多余的属性.
在这种情况下:
const func: () => ValObj =
() => ({
val: 5,
someStr: "sdf"
})
Run Code Online (Sandbox Code Playgroud)
完成输入的方法是首先找出箭头函数的类型,() => { val: number, someStr: string }然后检查它是否与给定的函数签名兼容,() => ValObj因为它{ val: number, someStr: string }是一个子类型ValObj.没有任何地方直接分配对象文字ValObj.
如果您明确指出箭头函数的返回类型,则会出现错误:
const func: () => ValObj =
() : ValObj => ({
val: 5,
someStr: "sdf"
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42 次 |
| 最近记录: |