当前位置: 首页 > 知识库问答 >
问题:

如何在typescript中找到子类a函数参数的实例?

胥承
2023-03-14

下面是我尝试的代码。我也试图制造任何类型的动物,但没有用。

export class Animal{}

export class Cat extends Animal{}

export class Dog extends Animal{}

export class Service {

    public insert(animals: Animal[], callback: Function) {
        animals.forEach((c: Animal) => {
            if (c instanceof Cat) {
                var thisCat: Cat = <Cat>c;
                //...
            } else if (c instanceof Dog) {
                var thisDog: Dog = <Dog>c;
                //...
            }
        });
    }
}

这可以只用一个函数来完成吗?还是我必须为每个动物子类保留两个分离的“服务”函数?

共有1个答案

西门凯康
2023-03-14

自1.4以来,这在Typescript中工作得很好,甚至比现在更容易:您不需要强制转换 C C ,因为InstanceOf用作类型保护。

也就是说,您可以选择创建一个抽象函数(正如Li357在注释中建议的那样)来更好地组织代码,这取决于您是否希望动物或服务承担容纳新动物或现有动物的新行为的责任。

实时链接

class Animal{}

class Cat extends Animal{
    meow() {/* ... */}
}

class Dog extends Animal{
    bark() {/* ... */}
}

class Service {

    public insert(animals: Animal[], callback: Function) {
        animals.forEach((c: Animal) => {
            if (c instanceof Cat) {
                console.log("Inserted a cat: %s", c)
                c.meow();
            } else if (c instanceof Dog) {
                console.log("Inserted a dog: %s", c)
                c.bark();
            }
        });
    }
}

let s = new Service();
let animalArray = [new Cat(), new Dog(), new Cat()];
s.insert(animalArray, () => {});
 类似资料:
  • 问题内容: 如何找到Python函数的参数数量?我需要知道它有多少个普通参数以及多少个命名参数。 例: 此方法有2个参数和1个命名参数。 问题答案: 早 于接受的答案已于 弃用 。现在,您应该选择取代它的类,而不是使用它。 创建功能的签名是通过简单的功能: 现在,您可以通过以下方式快速查看其参数: 或者您也可以通过来获取属性名称到参数对象的映射。 此外,你可以叫上也看到的参数此功能,需要数量: 映

  • 我有一个类,它有一些属性/方法,返回最初通过构造函数传递的值: 人们建议用泛型作为打字稿的等价物: 现在我有了一个子类,它调用超类的构造函数并传递以下选项: TypeScript编译器对此不满意,希望通过类型扩展Base类。但是我有两次信息,在超级呼叫和扩展符号中。什么是正确的ts语法来解决我的问题? (键入脚本中的代码)

  • 在我的超类中,我定义了参数a、b、c和d。对于它的子类,我想删除d。我有什么办法做到这一点吗? 在我的子类中,我想创建一个没有最后一个参数“东西”的构造函数 这样写会给我一个错误,子类TypeBPDescription中的构造函数是未定义的。我希望子类不包含“thing”,但我希望我的超类包含它。有什么办法吗?

  • 我在这里查过了https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md这是TypeScript语言规范,但我找不到如何声明函数的返回类型。 我在下面的代码中展示了我所期望的: 我知道我可以用

  • 为什么打字稿ES6没有检测到对象不是函数? 基于此函数,您会假设这将失败: 因为没有sortQuery对象,而是回调函数。这并没有给我任何类型的错误,这意味着typescript允许回调作为对象类型。 如何确保这会导致错误?

  • 每个参数的类型为string | string[] 如何能统一改成string呢? 用const sceneId = route.query.sceneId as string可以实现,但是每个参数都得这样写一遍吗?