所以,我正在学习打字稿,但我不明白这些参数是如何工作的
interface MyInterface {
(name?: string): any;
new (name?: string): any;
}
class MyClass implements MyInterface {
(name?: string): any; // This is not working
}
我的理解: name
应该是字符串参数,不是必需的
我不理解的内容:{y} any
如何运作? new name
是什么意思?
答案 0 :(得分:0)
这些是呼叫签名和构建签名。
任何具有MyInterface
类型的内容都可以是
string
参数。new
- ed),可选地带有string
参数。在这两种情况下,调用或new
一个MyInterface
都会产生any
类型的值。
至于此:
class MyClass implements MyInterface {
(name?: string): any; // This is not working
}
调用或构造签名只能按照the TypeScript spec在 TypeBody 中进行。类型主体仅用于对象类型文字和interface declarations。这与 ClassBody 略有不同,后者不允许调用/构造签名。
在类中,您可以改为定义构造函数:
class C {
constructor() {
console.log("Hi");
}
}
但是没有办法让一个类可以调用。
请注意,使用调用和构造签名实现某些操作意味着实例将获取类型,而不是静态端。换句话说,您说MyClass
生成的内容与MyInterface
兼容,但与MyClass
本身的静态形状无关。
除了像这样的黑客之外,没有办法确保静态边具有某种形状:
class MyClass {
// ...
}
if (!!false) {
let x: MyInterface = MyClass;
}