我已经在函数参数中添加了TypeScript类型。我不知道这是否重要,但是此功能是Redux Action Creator:
export const moveLayerUp = ({ index }: { index: number }) => {
return {
type: TYPES.MOVE_LAYER_UP,
index
};
};
要检查它是否正常运行,我将类型更改为字符串,但我希望该字符串会出错。但是它仍然可以正常工作:
export const moveLayerUp = ({ index }: { index: string }) => {
return {
type: TYPES.MOVE_LAYER_UP,
index
};
};
我从Redux开发工具中可以看到该函数被严格调用。类型错误时应该出错吗?
我使用带有--typescript
标志的Create React App创建项目。在tsconfig中,我将"strict": false
设置为我想添加合适的类型,而不是一直添加。
更新:调用它的函数是这样:
const handleUp = () => {
moveLayerUp({ index });
};
答案 0 :(得分:0)
这取决于如何声明在handleUp中使用的索引。如果它变成“ any”类型,则TypeScript会将其视为JavaScript变量,并且非常宽容。它将像JavaScript一样允许进行鸭式化。从您在评论中所说的听起来,这就是问题所在。
请考虑以下代码。这样可以在TypeScript中编译良好。索引的声明使其类型为“ any”,并且在将其传递到moveLayerUp时将其转换为字符串。因此,在moveLayerUp中为index =“ 1”。
const moveLayerUp = ({ index }: { index: string }) => { }
function callMoveLayerUp() {
var index;
index = 1;
moveLayerUp({ index });
}
现在考虑以下代码:
const moveLayerUp = ({ index }: { index: string }) => { }
function callMoveLayerUp() {
var index: number;
index = 1;
moveLayerUp({ index });
}
唯一的区别是索引声明为“数字”类型。该代码不会在TypeScript中编译。在对moveLayerUp的调用中遇到错误,“类型'数字'无法分配给类型'字符串'。索引明确是一个数字,因此您不能调用期望它为字符串的函数。
这就是为什么最好在TypeScript中声明所有变量的类型。