当使用bind时,如何对这种类型的typescript进行说明?

当使用bind时,如何对这种类型的typescript进行说明?,typescript,Typescript,我有3个文件,包含下一个内容: 树皮.ts Dog.ts index.ts 如果我使用干净的JS(不带TS)运行这个示例,那么它就可以正常工作。但是当我将这个示例用于typescript时,这个有未知的类型编译错误。 那么如何在文件bark.TS中对TS编译器类型this进行说明呢 树皮.ts 在这里可以找到答案:您想要的是对此的约束。您可以在函数签名中的魔法参数this上设置它 function(this: SomeType) {} 现在在本例中,您的方法只关心name属性。所以你不需要这个

我有3个文件,包含下一个内容:

树皮.ts

Dog.ts

index.ts

如果我使用干净的JS(不带TS)运行这个示例,那么它就可以正常工作。但是当我将这个示例用于typescript时,
这个
有未知的类型编译错误。 那么如何在文件
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;
}