Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.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

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 如何在Typescript中将代码与类型分开?_Javascript_Typescript_Types_Typescript Typings_Transpiler - Fatal编程技术网

Javascript 如何在Typescript中将代码与类型分开?

Javascript 如何在Typescript中将代码与类型分开?,javascript,typescript,types,typescript-typings,transpiler,Javascript,Typescript,Types,Typescript Typings,Transpiler,我希望,而不是像这样混合代码和类型: const compar8 : boolean | error = (action: string, n: number) => { switch(action) { case 'greater': return n > 8; case 'less': return n < 8; case 'equal': ret

我希望,而不是像这样混合代码和类型:

const compar8 : boolean | error = (action: string, n: number) => {
    switch(action) {
        case 'greater':
            return n > 8;
        case 'less':
            return n < 8;
        case 'equal':
            return n === 8;
        default:
            throw new Error('Invalid action');
    }
}
// code.js

const compar8 = (action, n) => {
    switch(action) {
        case 'greater':
            return n > 8;
        case 'less':
            return n < 8;
        case 'equal':
            return n === 8;
        default:
            throw new Error('Invalid action');
    }
}

// types.ts
compar8 : (string, number) => boolean | error
然后将其用于具有相同签名的所有函数:

// types.ts

compar8: myType
compar9: myType
...
etc
有办法吗?

只需提前将其声明为类型:

type Compar8 = (compare: string, n: number) => boolean;
const compar8: Compar8 = (compare, n) => {
    switch(action) {
        case 'greater':
            return n > 8;
        case 'less':
            return n < 8;
        case 'equal':
            return n === 8;
        default:
            throw new Error('Invalid action');
    }
}
请注意,由于没有返回错误,因此不应将其包含在类型中。TypeScript中未记录可能引发的异常类型。只有在返回新错误之类的情况下,才会执行=>boolean | error。不要抛出。只需提前将其声明为类型:

type Compar8 = (compare: string, n: number) => boolean;
const compar8: Compar8 = (compare, n) => {
    switch(action) {
        case 'greater':
            return n > 8;
        case 'less':
            return n < 8;
        case 'equal':
            return n === 8;
        default:
            throw new Error('Invalid action');
    }
}

请注意,由于没有返回错误,因此不应将其包含在类型中。TypeScript中未记录可能引发的异常类型。只有在返回新错误之类的情况下,才会执行=>boolean | error。不抛出。

typemytype=string,number=>boolean |错误将正常工作,是的,然后constcompar8:myType=。。。。看见注意:const compar8:boolean | error根本不对,因为该值是一个函数。type myType=string,number=>boolean | error可以正常工作,是的,那么const compar8:myType=。。。。看见注释const 8:BooLang-Error根本不正确,因为它是一个函数。@ EngyPur发热——如果您喜欢,类型可以由Type Ts导出,并由定义Labe8. .RealEngor有关返回和不投掷错误的代码导入,它认为在Typescript最好的做法是什么?我应该有类似于:myFun:success|u response | error 1 | error 2 | error 3或捕获不同的错误吗?@entropyfever如果你真的需要静态类型检查来区分不同的可能错误,你可以这样做,但我认为需要这样的东西有点奇怪。在几乎所有情况下,只要知道返回或抛出错误就足够了,如果需要@entropyfever,可以在运行时缩小精确的错误范围。如果您愿意,类型可以通过types.ts导出,并通过定义compar8的代码导入。@CertainPerformance关于返回和不抛出错误,Typescript最好的做法是什么?我应该有类似于:myFun:success|u response | error 1 | error 2 | error 3或捕获不同的错误吗?@entropyfever如果你真的需要静态类型检查来区分不同的可能错误,你可以这样做,但我认为需要这样的东西有点奇怪。在几乎所有情况下,只知道返回或抛出错误就足够了,如果需要,可以在运行时缩小精确的错误范围