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

How to separate code from types in Typescript?

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

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

原因是 1. 更具可读性 2. 将相同的类型分配给某个函数,例如:

myType = (string, number) => boolean | error

然后将其用于具有相同签名的所有函数:

// types.ts

compar8: myType
compar9: myType
...
etc

有办法吗?

只需提前将其声明为type即可:

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 中没有注明可能抛出的异常类型。只有当你有类似 return new Error() 的东西时,你才会做 => boolean | error。 (不是throw)。