Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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 如何更改函数以接受不同类型作为参数_Javascript_Typescript_Function_Prototype - Fatal编程技术网

Javascript 如何更改函数以接受不同类型作为参数

Javascript 如何更改函数以接受不同类型作为参数,javascript,typescript,function,prototype,Javascript,Typescript,Function,Prototype,在下面的示例中,myFoo将接受类型为Boolean的参数 function myFoo(value:Boolean) { } 我的问题是,是否可以使用prototype将myFoo函数更改为接受多个类型 例如,函数myFoo(值:Boolean | string){} 注意:myFoo是一个全局函数,不能直接编辑 已更新 位于不同文件中的全局函数 export declare class MyGlobalClass<T> extends Observable<T> i

在下面的示例中,
myFoo
将接受类型为
Boolean
的参数

function myFoo(value:Boolean) { }
我的问题是,是否可以使用prototype将
myFoo
函数更改为接受多个
类型

例如,
函数myFoo(值:Boolean | string){}

注意:
myFoo
是一个全局函数,不能直接编辑

已更新

位于不同文件中的全局函数

export declare class MyGlobalClass<T> extends Observable<T> implements Observer<any> {
    myFunc(value: Boolean): void;
} 
但它会抛出类型错误。因为myFunc只接受
布尔值
。我需要解决这个问题

将类型更改为“任意”


请注意,您将丢失Typescript为此提供的所有类型检查,因为您基本上是在告诉Typescript您希望允许您的“value”参数可以是任何类型。

您不能在运行时更改Typescript类型,因为它们在代码运行时不存在。您所说的“更改”是什么意思?您的用例是什么?是否尝试将字符串传递给原始函数?是否覆盖全局变量?您只想重新声明函数的类型吗?是的,您可以这样做,它将被称为松散类型的函数声明。请注意,这些类型只是发展援助。一旦传输到vanilla javascript(在浏览器中执行的版本),此类型信息将丢失。它将与
函数myFoo(value){}
一样好,但您仍然可以使用
typeof
构造来检查传递参数的运行时类型。我正在尝试使用accepts only Boolean将字符串传递给源函数,我需要尽快修复小补丁。我不建议使用
函数myFoo(value){}
。正如我所写的,这就是它将有效传输到的内容。类型信息将在运行时丢失。我所说的“丢失”是指知道给定函数接受的参数类型,通过在运行时查看函数对象,我们无法确定它接受的参数类型。但是当函数实际使用参数调用时,我们可以使用
typeof
查看参数类型,然后根据传递的类型执行条件执行。有关如何实现所需补丁类型的详细信息,请参见我的答案。
function myFoo(value: Boolean|string) {
    if (typeof value === 'string') {
        //do string patch
    } else {
        //whatever
    }
}
function myFoo(value:any) { }
function myFoo(value: Boolean|string) {
    if (typeof value === 'string') {
        //do string patch
    } else {
        //whatever
    }
}