gpt4 book ai didi

typescript - 如何在 TypeScript 中定义全局函数?

转载 作者:搜寻专家 更新时间:2023-10-30 20:33:27 25 4
gpt4 key购买 nike

我想定义一个随处可用的全局函数,使用时不需要导入模块。

此函数旨在替换 C# 中可用的安全导航运算符 (?)。为了可读性,我不想在函数前加上模块名称。

Global.d.ts:

declare function s<T>(someObject: T | null | undefined, defaultValue?: T | null | undefined) : T;

全局.tsx:

///<reference path="Global.d.ts" />

export function s<T>(object: T | null | undefined, defaultValue: T | null = null = {} as T) : T {
if (typeof object === 'undefined' || object === null)
return defaultValue as T;
else
return object;
}

App.tsx(根 TypeScript 文件):

import 'Global';

其他TSX文件(方法使用):

s(s(nullableVar).member).member; //Runtime error

这可以正常编译,但是在浏览器中会抛出“s is not a function”。

最佳答案

您正在为编译器定义类型,但实际上并没有将其附加到全局命名空间——浏览器中的 window,node 中的 global。不是从模块中导出它,而是附加它。对于同构使用,使用类似...

function s() { ... }

// must cast as any to set property on window
const _global = (window /* browser */ || global /* node */) as any
_global.s = s

您也可以放弃 .d.ts 文件并使用 declare global 在同一文件中声明类型,例如

// we must force tsc to interpret this file as a module, resolves
// "Augmentations for the global scope can only be directly nested in external modules or ambient module declarations."
// error
export {}

declare global {
function s<T>(someObject: T | null | undefined, defaultValue?: T | null | undefined) : T;
}

const _global = (window /* browser */ || global /* node */) as any
_global.s = function<T>(object: T | null | undefined, defaultValue: T | null = null) : T {
if (typeof object === 'undefined' || object === null)
return defaultValue as T;
else
return object;
}

关于typescript - 如何在 TypeScript 中定义全局函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47736473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com