为什么Typescript不尊重我的接口中返回对象的类型?

为什么Typescript不尊重我的接口中返回对象的类型?,typescript,types,interface,Typescript,Types,Interface,我创建了一个接口来表示函数的返回类型。但是,如果我将返回的类型更改为意外的类型,TypeScript不会像我预期的那样出错。请参见下面的示例,或参见中的示例: 我收到的输出是:id:“123”,isLatest:true,createdAt:“123”,updatedAt:456} 但是我希望它不会运行,因为createdAt应该是一个数字,而不是一个字符串。为什么即使类型与预期接口不匹配也会运行此操作?您的tsconfig是什么?您正在使用any,它告诉TypeScript忽略键入问题。您的代

我创建了一个接口来表示函数的返回类型。但是,如果我将返回的类型更改为意外的类型,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()