Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Typescript定义类类型而不定义JS类?_Javascript_Typescript - Fatal编程技术网

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不错,五个答案!尊敬地