构造函数的打字稿多态性

时间:2020-10-19 13:59:46

标签: typescript inheritance constructor polymorphism

假设我们有一个非常简单的类架构:

import {RNCamera, Camera} from 'react-native-camera'
import { View,Text,Screen,Image  } from 'react-native';
import Button from 'apsl-react-native-button';
import React from 'react';

export default function Reunion ({navigation}){

    const cameraRef = React.createRef();

    return (
        <View style={{
            backgroundColor: "#fff",
            flex:1,
            alignItems: 'center',
            justifyContent: 'center'
        }}>
        <View
        style={{
            position: 'relative',
            left:0,
            top:-15,
            width:1080,
            height:480,
            backgroundColor: '#c4c4c4'
        }}
        >
        <RNCamera
          style={{ flex: 1, alignItems: 'center' }}
          captureAudio={false}
          ref={cameraRef}
        />
            
        </View>
        </View>
    )
}

我想要实现的是将扩展Vehicle的构造函数类型存储在变量中,如下所示:

class Vehicle {}

class Car extends Vehicle {
    wheels: Number

    constructor(wheels: Number) {
        super()
        this.wheels = wheels
    }
}

然后,编译器抱怨let vehicleConstructor: typeof Vehicle = Car // this do not work 无法分配给类型Car。我能理解为什么:这是因为两个类的构造函数没有相同的签名。要创建汽车,当typeof Vehicle不需要参数时,必须使用wheels参数。

我在代码中真正想要的是拥有一个Vehicle构造函数数组:

Vehicle

以便我可以检查随机对象是否是数组中元素之一的实例。

我不会使用此数组来创建载具,所以我不在乎构造函数的参数。我只需要确保我有一个函数数组或类构造函数,无论参数如何,它们都返回let constructors: Array<typeof Vehicle> = [Car, Truck]

关于如何实现该目标的任何想法?只能在Typescript中使用吗?

1 个答案:

答案 0 :(得分:0)

好的,我感谢 Titian Cernicova-Dragomir 的提示。

我需要做的是这样:

let vehicleConstructor: (new(...args: any) => Vehicle) = Car