1

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

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

有没有办法做到这一点?

4

1 回答 1

4

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

于 2020-11-13T15:15:09.500 回答