【发布时间】:2017-01-31 19:50:45
【问题描述】:
我试图了解 Typescript 提供的类型安全的程度。我遇到了一种情况,我预计会出错,但 Typescript 没有抱怨。
我定义了一个函数,其参数与某个接口匹配。然后我用一些不匹配的参数调用函数。这是代码(or in playground):
interface ArgumentInterface {
[key: number]: string
}
interface InvalidArgumentInterface {
[key: string]: number
}
interface InvalidArgumentInterface2 {
foo: number
}
function myFunction(arg: ArgumentInterface) {
// function body
}
let validArgument: ArgumentInterface = {};
validArgument[5] = 'I am a string';
let invalidArgument: InvalidArgumentInterface = {
foo: 42
};
let invalidArgument2: {foo: number} = {
foo: 42
};
let invalidArgument3: InvalidArgumentInterface2 = {
foo: 42
};
let invalidArgument4 = {
foo: 42
};
myFunction(validArgument); // no typescript error, as expected
myFunction(invalidArgument); // typescript error, as expected
myFunction(invalidArgument2); // no typescript error!
myFunction(invalidArgument3); // typescript error, as expected
myFunction(invalidArgument4); // no typescript error!
当我的参数变量显式声明一个不兼容的接口时,我得到了预期的 Typescript 错误。但是当我的参数变量声明一个类型文字(没有接口)或根本没有声明任何类型时,Typescript 根本不会抱怨,尽管我预计会出错。
我已将“noImplicitAny”标志设置为 true。
谁能解释这种行为?
【问题讨论】:
标签: typescript