Typescript 创建;假;打字脚本中的新类型

Typescript 创建;假;打字脚本中的新类型,typescript,Typescript,我有许多函数接受ID作为参数(当前的类型为string) 我想用类型ID替换它,它仍然只是一个字符串,但允许我利用静态检查来确保正确传递参数。不确定为什么要将ID等效于字符串 在这样的任何情况下,您要么想使用字符串,要么就无法从typescript的角度判断它们是否不同,因为您只是重复使用相同的确切类型。做一些类似于: type ID = string 将不会有帮助,因为字符串仍然有效。您不能使用“typeof”有效,因为: type ID = string; class WorkWithI

我有许多函数接受ID作为参数(当前的类型为
string


我想用类型
ID
替换它,它仍然只是一个字符串,但允许我利用静态检查来确保正确传递参数。

不确定为什么要将ID等效于字符串

在这样的任何情况下,您要么想使用字符串,要么就无法从typescript的角度判断它们是否不同,因为您只是重复使用相同的确切类型。做一些类似于:

type ID = string
将不会有帮助,因为字符串仍然有效。您不能使用“typeof”有效,因为:

type ID = string;

class WorkWithIDs {
    public alertID(data: ID) {
        alert(typeof (data));
    }
} 

let testWorkWithIDs = new WorkWithIDs();
let actualID: ID;
testWorkWithIDs.alertID("dsfsdf");
testWorkWithIDs.alertID(actualID);
警报: -串 -未定义

用你自己的话来说,目前ID是一个字符串。为什么不使用一个名为“ID”的常规类,您可以扩展所有您想要的并且已经用于类型检查的类


因此,据我所知,目前还没有一种方法可以使用Typescript提供的工具实现您想要的功能,也就是说,使另一种类型的类型强制执行该基本类型不能用作输入。

type ID=string
这里有一个例子@4castle使用该方法,将任何字符串传递给函数都会导致它编译无误,而我希望它会引发错误。@artem似乎可以工作。我假设我只是保留brand字段未定义,并强制使用
as
?@artem进行类型转换。不幸的是,新类型不再可用作其他对象的索引。