如何强制TypeScript为此代码提供错误?

时间:2018-05-06 08:27:12

标签: typescript custom-type

通常在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来定义函数;第一个"第二个类型"第二个"但是当我调用它时,我传递了两个倒置类型的参数

2 个答案:

答案 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也是同一类型的别名(两个接口具有相同类型的相同属性)