我是打字机的新手,我看到了一本书,其中包含以下内容:
(<any>window).model= ...;
我很困惑,在变量前添加<any>
的语法名称是什么?这样做有什么好处?
答案 0 :(得分:1)
那是type assertion。您要告诉编译器使用与它认为的类型不同的类型。
答案 1 :(得分:0)
使用这样的类型断言时,您基本上是在告诉编译器“嘿,编译器我知道我在做什么,放松一下。”有时您必须这样做才能在对象上设置新属性,例如,我假设如果您只是window.model
,编译器会抱怨说model
不是...的属性。 window
。
仅在确实需要这样做时才建议这样做,因为一切都使用any
与根本不使用TypeScript相同。因此,无论何时决定断言类型,都应谨慎行事。
奖金信息:
您还可以编写window as any
,在我看来,它更具可读性和可读性。
答案 2 :(得分:0)
因为model
在Window界面中不存在:
https://github.com/microsoft/TypeScript/blob/v3.6.4/lib/lib.dom.d.ts#L18500
您可以访问window.document
,window.addEventListener()
等
因此,您要告诉编译器“让窗口对象成为任何事物”。
没有强制转换,编译器会说Property 'model' does not exist on type 'Window & typeof globalThis'.
另一个例子:
interface Person {
age: number;
name: string
}
let michael: Person = {
age: 28,
name: 'Michael'
};
michael.age++;
(<any>michael).hasDogs = true; // hasDogs is not a property of Person, so cast michael to be anything
您可以在这里进行测试:https://www.typescriptlang.org/play/#code/O4SwdgJg9sB0C2UIFMA2ACAvOg5ACzVRhwG4g