当使用bind时,如何对这种类型的typescript进行说明?
我有3个文件,包含下一个内容: 树皮.ts Dog.ts index.ts 如果我使用干净的JS(不带TS)运行这个示例,那么它就可以正常工作。但是当我将这个示例用于typescript时,当使用bind时,如何对这种类型的typescript进行说明?,typescript,Typescript,我有3个文件,包含下一个内容: 树皮.ts Dog.ts index.ts 如果我使用干净的JS(不带TS)运行这个示例,那么它就可以正常工作。但是当我将这个示例用于typescript时,这个有未知的类型编译错误。 那么如何在文件bark.TS中对TS编译器类型this进行说明呢 树皮.ts 在这里可以找到答案:您想要的是对此的约束。您可以在函数签名中的魔法参数this上设置它 function(this: SomeType) {} 现在在本例中,您的方法只关心name属性。所以你不需要这个
这个
有未知的类型编译错误。
那么如何在文件bark.TS
中对TS编译器类型this
进行说明呢
树皮.ts
在这里可以找到答案:您想要的是对
此
的约束。您可以在函数签名中的魔法参数this
上设置它
function(this: SomeType) {}
现在在本例中,您的方法只关心name
属性。所以你不需要这个
成为狗
,你只需要它有一个名称
属性
换句话说,bark()中的这个
需要实现接口{name:string}
export function bark(this: { name: string }) {
console.log('My name', this.name);
}
现在,代码的其余部分可以工作,并且是类型安全的。最酷的是,如果你的类没有名称
,那么typescript根本不允许你绑定这个函数:
// This class does not fit the contract of bark()
class NamelessDog {
constructor () {
bark.bind(this); // type error, name is a required property to use bark()
}
makeVoice = bark;
}
export function bark (this: Dog) {
console.log('My name', this.name);
}
function(this: SomeType) {}
export function bark(this: { name: string }) {
console.log('My name', this.name);
}
// This class does not fit the contract of bark()
class NamelessDog {
constructor () {
bark.bind(this); // type error, name is a required property to use bark()
}
makeVoice = bark;
}