TypeScript严格的类/接口

Har*_*rns 10 typescript typescript2.0

我使用TypeScript版本2.3.4.我想编写一个接受必须具有指定字段的对象的函数.但是此对象不应包含任何其他字段.我怎样才能做到这一点?

现在这只有在我定义对象内联时才有效.但是,如果我使用另一个带有额外字段的对象 - 编译器将允许它.什么是完全错误的.

例:

function foo(arg: { a: string }) { // there is tons of fields actually
  // ...
}

foo ({a: "qwerty"}); // No Error - ok

foo ({a: "qwerty", b: 123}); // Error - ok

let bar = {
  a: "qwerty",
  b: 123
};

foo (bar); // No Error - NOT OK !!!
Run Code Online (Sandbox Code Playgroud)

可以使用接口,类,类型声明来编写相同的代码 - 这是同样的问题.

现在我必须手动从对象中提取字段,以确保没有额外的字段.但是我无法在整个代码中传播〜1000个函数(我真的需要这个) - 它太乱了.我创建API包装器,我需要确保没有传递给服务器的额外或错误的字段.

art*_*tem 5

您要求的功能称为“精确类型”。
正在考虑中,即既不拒绝也不接受,讨论仍在继续。