Javascript Typescript定义类类型而不定义JS类?
我想为具有某些属性的类创建一个类类型。例如:Javascript Typescript定义类类型而不定义JS类?,javascript,typescript,Javascript,Typescript,我想为具有某些属性的类创建一个类类型。例如: class Cat { name = 'cat'; } class Dog { name = 'dog'; } type Animal = ???; function foo(AnimalClass: Animal) { console.log((new AnimalClass()).name); } 我希望doSomething接受任何具有字符串name属性的类。我能做到这一点的唯一方法是: class _Animal {
class Cat {
name = 'cat';
}
class Dog {
name = 'dog';
}
type Animal = ???;
function foo(AnimalClass: Animal) {
console.log((new AnimalClass()).name);
}
我希望doSomething
接受任何具有字符串name
属性的类。我能做到这一点的唯一方法是:
class _Animal {
name: string;
}
type Animal = typeof _Animal;
有没有一种方法可以在不定义新JS类的情况下实现这一点?我只需要类型。您可以使用
new
表达式描述构造函数:
type AnimalContructor = new () => { name: string };
function foo(AnimalClass: AnimalContructor) {
console.log((new AnimalClass()).name);
}
另一个选项是定义构造函数的并集:
type AnimalContructor = typeof Cat | typeof Dog;
您可以在这里使用泛型。我创建了一个类型,使该类型只能分配给name属性为字符串的对象,然后我添加了一个扩展Animal类型的泛型类型。这样,您就不必为Animal创建新类
类Cat{
name=“cat”;
年龄=2岁;
}
班犬{
名称=‘狗’;
}
班车{
品牌=“奥迪”;
}
类型Animal={name:string};
功能剂量测定法(动物:T){
}
doSomething(新狗());
doSomething(新Cat());
doSomething(新车());//typescript错误car缺少名称
接口未编译为javascript,理想情况下用于intellisense。那是最好的选择。缺点是在创建时,必须显式定义所有属性。使用new()=>{}
语法,是否可以使用extends
?例如,如果Dog
和Cat
都扩展了第三方库类,我希望Animal
扩展相同的类。我尝试了类似于typeanimalconstructor=new()=>{name:string;prototype:Foo.prototype}代码>但那不起作用是的,你可以使用这个类型animalcontractor=new()=>{name:string}&Foo代码>不错,五个答案!尊敬地