通常在TypeScript中,我定义了非常复杂的类型,所以我从来没有遇到过这个问题,但我找不到一个简单的方法来解决它。
type first = number;
type second = number;
let f: first = 1;
let s: second = 2;
const func = (arg1: first, arg2: second) => { };
func(s, f);
我希望从这段代码中得到一个错误,因为我用第一个参数类型&#34来定义函数;第一个"第二个类型"第二个"但是当我调用它时,我传递了两个倒置类型的参数
答案 0 :(得分:2)
目前打字稿不支持nominal typing。 作为一种解决方法,人们使用类型标记/标记:
type First = number & { readonly _tag: unique symbol };
type Second = number & { readonly _tag: unique symbol };
let f = 1 as First;
let s = 2 as Second;
const func = (arg1: First, arg2: Second) => { };
func(s, f); // Error: Types of property '_tag' are incompatible.
答案 1 :(得分:0)
TypeScript并不关心类型名称(或别名),只关心类型的形状。 var resultArray =[];
keysArray.forEach(function(key){
if(obj[key]){
resultArray.push(obj[key]);
}
});
和first
两种类型都是编译器的相同类型,因此您不会收到错误。
事实上,由于结构类型,这段代码也可以使用:
second
因为interface I1 {
name: string;
age: number;
}
interface I2 {
age: number;
name: string;
}
var a1: I1;
var a2: I2;
function log(arg1: I1, arg2: I2): void {
console.log(arg1, arg2);
}
log(a2, a1);
和I1
也是同一类型的别名(两个接口具有相同类型的相同属性)