为什么Typescript不尊重我的接口中返回对象的类型?
我创建了一个接口来表示函数的返回类型。但是,如果我将返回的类型更改为意外的类型,TypeScript不会像我预期的那样出错。请参见下面的示例,或参见中的示例: 我收到的输出是:为什么Typescript不尊重我的接口中返回对象的类型?,typescript,types,interface,Typescript,Types,Interface,我创建了一个接口来表示函数的返回类型。但是,如果我将返回的类型更改为意外的类型,TypeScript不会像我预期的那样出错。请参见下面的示例,或参见中的示例: 我收到的输出是:id:“123”,isLatest:true,createdAt:“123”,updatedAt:456} 但是我希望它不会运行,因为createdAt应该是一个数字,而不是一个字符串。为什么即使类型与预期接口不匹配也会运行此操作?您的tsconfig是什么?您正在使用any,它告诉TypeScript忽略键入问题。您的代
id:“123”,isLatest:true,createdAt:“123”,updatedAt:456}
但是我希望它不会运行,因为
createdAt
应该是一个数字,而不是一个字符串。为什么即使类型与预期接口不匹配也会运行此操作?您的tsconfig
是什么?您正在使用any
,它告诉TypeScript忽略键入问题。您的代码在语法上也是有效的,因此可以很好地传输到JS,这就是它运行的原因。您应该在严格模式下编译,并向我们显示所有tsc
输出消息。明白。我发现,如果我使用ITest
作为testZero()
的返回类型,那么实际上,我会得到一个错误。既然如此,为什么testOne()
的输出不将类型强制为ITest
中的预期类型?这是否回答了您的问题?只要删除:任何
返回类型声明,它就可以正常工作。您正在使用它将精确类型重写为任意类型,这会破坏TS正确执行检查所需的类型信息。你应该不惜一切代价避免使用any
类型,并且尽量少用。你的tsconfig
是什么?您正在使用any
,它告诉TypeScript忽略键入问题。您的代码在语法上也是有效的,因此可以很好地传输到JS,这就是它运行的原因。您应该在严格模式下编译,并向我们显示所有tsc
输出消息。明白。我发现,如果我使用ITest
作为testZero()
的返回类型,那么实际上,我会得到一个错误。既然如此,为什么testOne()
的输出不将类型强制为ITest
中的预期类型?这是否回答了您的问题?只要删除:任何
返回类型声明,它就可以正常工作。您正在使用它将精确类型重写为任意类型,这会破坏TS正确执行检查所需的类型信息。您应该不惜一切代价避免使用any
类型,并且尽量少用。
export interface ITest {
id: string
isLatest: boolean
createdAt: number
updatedAt: number
}
function testZero(): any {
return {
id: '123',
isLatest: true,
createdAt: '123',
updatedAt: 456
}
}
function testOne(): ITest {
return testZero()
}
function testTwo() {
const res = testOne()
console.log(res)
}
testTwo()