我已经尝试了很长时间才能让 VSC 工具提示向我显示函数的参数属性:
将鼠标悬停在界面上没有给我任何结果:
将鼠标悬停在类型上是有效的,这很令人兴奋,但也很奇怪,因为接口不会递归扩展:
不幸的是,将鼠标悬停在函数上并不会扩展其参数:
我错过了什么吗?如果我可以看到参数的形状或类型文档,而不必转到函数的文件/d.ts,然后转到参数的类型文件,那就太不可思议了。
推断类型的示例:
或者,VS Code 在您打字时为您提供这样的美感:
刚刚发现“添加缺少的属性”,它看起来非常有用:
感谢您的帮助!
我试图理解为什么 TS 没有缩小inst到仅Bar在下面的示例中:
class Foo {}
class Bar { prop = "baz" }
function fn2(inst: Foo | Bar) {
if (inst instanceof Foo) {
inst = new Bar()
}
inst.prop // prop does not exist on Foo | Bar
}
Run Code Online (Sandbox Code Playgroud) 我有一种情况,我认为需要类型谓词或“缩小范围”?
const obj1 = { foo: 123 }
const obj2 = { bar: 456 }
type ObjKey = keyof typeof obj1 | keyof typeof obj2
function getVal(key: ObjKey) {
return key in obj1 ? obj1[key] : obj2[key]
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,我是否在检查功能上放置了“类型保护”?不知道如何编写该示例:
function objHasKey(obj: object, key: string) {
return obj.hasOwnProperty(key)
}
function getVal(key: ObjKey) {
return objHasKey(obj1, key) ? obj1[key] : obj2[key]
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试修改接口(或类型)以在某些情况下包含额外的字段,我看到的实现如下所示:
interface Person {
name: string
}
const person: WithAge<Person> = {name: "Foo", age: 123 }
Run Code Online (Sandbox Code Playgroud)
我怎样才能重新创建这个?