Heim > Artikel > Web-Frontend > Lassen Sie uns über den Unterschied zwischen „unknown“ und „any“ in TypeScript sprechen
Dieser Artikel wird Ihnen helfen, „unknown“ und „any“ in TypeScript zu vergleichen und über die Unterschiede zwischen „unknown“ und „any“ zu sprechen. Ich hoffe, er wird Ihnen hilfreich sein!
Wir wissen, dass Variablen vom Typ any
jedem beliebigen Wert zugewiesen werden können. any
类型的变量可以被赋给任何值。
let myVar: any = 0; myVar = '1'; myVar = false;
TypeScript 指南并不鼓励使用 any
,因为使用它就会丢掉类型限制--而需要类型限制也是我们选择 TypeScript 的一个原因,所以就是有点背道而驰。
TypeScript(3.0 及以上版本)还提供了一种类似于 any
的特殊类型 unknown
。 我们也可以为 unknown
类型变量分配任何值:
let myVar: unknown = 0; myVar = '1'; myVar = false;
那现在就有一个问题了, any
和 unknown
有啥区别?
为了更好地理解 unknown
和 any
之间的区别,我们先从编写一个想要调用其唯一参数的函数开始。
我们将 invokeAnything()
的唯一参数设置为 any
类型
function invokeAnything(callback: any) { callback(); } invokeAnything(1); // throws "TypeError: callback is not a function"
因为 callback
参数是任何类型的,所以语句 callback()
不会触发类型错误。我们可以用any
类型的变量做任何事情。
但是运行会抛出一个运行时错误:TypeError: callback is not a function
。1
是一个数字,不能作为函数调用,TypeScript并没有保护代码避免这个错误
那既允许 invokeAnything()
函数接受任何类型的参数,又要强制对该参数进行类型检查防止上面这种报错,要怎么做呢?
有请 unknown
大哥来控场。
与 any
一样,unknown
变量接受任何值。但是当尝试使用 unknown
变量时,TypeScript 会强制执行类型检查。这不就是我们想要的嘛。
function invokeAnything(callback: unknown) { callback(); // Object is of type 'unknown' } invokeAnything(1);
因为 callback
参数的类型是 unknown
,所以语句 callback()
有一个类型错误 :Object is of type 'unknown'
。 与 any
相反,TypeScript会保护我们不调用可能不是函数的东西。
在使用一个 unknown
类型的变量之前,你需要进行类型检查。在这个例子中,我们只需要检查callback
是否是一个函数类型。
function invokeAnything(callback: unknown) { if (typeof callback === 'function') { callback(); } } invokeAnything(1);
说实话,当我学习的时候,我很难理解 unknown
。它与 any
有什么不同,因为这两种类型都接受任何值
下面是帮助我理解两者区别的规则:
unknown
类型,但在进行类型检查或类型断言之前,不能对 unknown
进行操作any
类型,也可以对any
类型进行任何操作上面的例子正好说明了 unknown
和 `any 之间的相似和不同。
unknown
示例:
function invokeAnything(callback: unknown) { // 可以将任何东西赋给 `unknown` 类型, // 但在进行类型检查或类型断言之前,不能对 `unknown` 进行操作 if (typeof callback === 'function') { callback(); } } invokeAnything(1); // You can assign anything to `unknown` type
类型检查 typeof callback === 'function'
,检查 callback
是否为函数,如果是,则可以调用。
any
示例:
function invokeAnything(callback: any) { // 可以对 `any` 类型执行任何操作 callback(); } invokeAnything(1); // 可以把任何东西分配给`any`类型
如果 callback
是 any
, TypeScript 就不会强制 callback()
语句进行任何类型检查。
unknown
和 any
是2个特殊的类型,可以容纳任何值。
推荐使用 unknown
而不是 any
,因为它提供了更安全的类型--如果想对 unknown
rrreee
any
, da durch dessen Verwendung Typbeschränkungen verloren gehen – und die Notwendigkeit von Typbeschränkungen ist auch einer der Gründe, warum wir Wählen Sie TypeScript, also geht es ein bisschen in die entgegengesetzte Richtung. Nun stellt sich die Frage, was der Unterschied zwischen any
und unknown
ist ? 🎜unknown
und any
besser zu verstehen, beginnen wir zunächst indem Sie eine Funktion schreiben, deren einziges Argument Sie aufrufen möchten. 🎜🎜Wir setzen den einzigen Parameter von invokeAnything()
auf den Typ any
. 🎜rrreee🎜Da der Parameter callback
von einem beliebigen Typ ist, ist der Die Anweisung callback()
löst keinen Typfehler aus. Mit Variablen vom Typ any
können wir alles machen. 🎜🎜Aber beim Ausführen wird ein Laufzeitfehler ausgegeben: TypeError: callback is not a function
. 1
ist eine Zahl und kann nicht als Funktion aufgerufen werden. TypeScript schützt den Code nicht, um diesen Fehler zu vermeiden. Dadurch kann die Funktion invokeAnything()
nicht nur beliebige Zahlen akzeptieren Typ von Parametern, sondern auch Kräfte. Wie führe ich eine Typprüfung für diesen Parameter durch, um den oben genannten Fehler zu verhindern? 🎜🎜Bruder unbekannt
ist eingeladen, das Feld zu kontrollieren. 🎜🎜Wie any
akzeptiert die Variable unknown
jeden Wert. TypeScript erzwingt jedoch eine Typprüfung, wenn versucht wird, unbekannte
-Variablen zu verwenden. Ist das nicht das, was wir wollen? 🎜rrreee🎜Da der Typ des callback
-Parameters unbekannt
ist, weist die Anweisung callback()
einen Typfehler auf: Object is of Geben Sie „unbekannt“ ein
. Im Gegensatz zu any
schützt uns TypeScript davor, etwas aufzurufen, das möglicherweise keine Funktion ist. 🎜🎜Bevor Sie eine Variable vom Typ unknown
verwenden, müssen Sie eine Typprüfung durchführen. In diesem Beispiel müssen wir nur prüfen, ob callback
ein Funktionstyp ist. 🎜rrreeeunknown
zu verstehen. Wie unterscheidet es sich von any
, da beide Typen jeden Wert akzeptieren 🎜🎜Hier sind die Regeln, die mir geholfen haben, den Unterschied zwischen den beiden zu verstehen: 🎜 zugewiesen werden unbekannte
-Typen, aber es können keine Operationen für unknown
ohne Typprüfung oder Typzusicherung durchgeführt werdenjedem
any
unknown
und „any different“. 🎜🎜unknown
Beispiel: 🎜rrreee🎜Typprüfung typeof callback === 'function'
, prüfen, ob callback
eine Funktion ist, wenn ja, dann Kann aufgerufen werden. 🎜🎜any
Beispiel: 🎜rrreee🎜Wenn callback
any
ist, erzwingt TypeScript die Anweisung callback()
nicht Führen Sie etwaige Typprüfungen durch. 🎜unknown
und any
sind zwei spezielle Typen, die einen beliebigen Wert enthalten können. 🎜🎜Es wird empfohlen, unknown
anstelle von any
zu verwenden, da dies einen sichereren Typ bietet – wenn Sie mit unknown
arbeiten möchten, müssen Sie verwenden den Typ Assert oder auf einen bestimmten Typ eingrenzen. 🎜🎜Weitere Kenntnisse zum Thema Programmierung finden Sie unter: 🎜Programmiervideos🎜! ! 🎜Das obige ist der detaillierte Inhalt vonLassen Sie uns über den Unterschied zwischen „unknown“ und „any“ in TypeScript sprechen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!