如何将代码与 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
)。
我想,而不是像这样混合代码和类型:
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
)。