如何在 lambda 中为局部变量创建类型定义?

Posted

技术标签:

【中文标题】如何在 lambda 中为局部变量创建类型定义?【英文标题】:How to create a type definition for local variable inside lambda? 【发布时间】:2020-01-10 12:12:28 【问题描述】:

所以我决定将专有方法添加到类的实例中,但这会扼杀我的类型信息。这就是我要说的:

window.onload = async () => 

    let picker = new Windows.Storage.Pickers.FolderPicker()
    picker.fileTypeFilter.append("*")
    let files = await (await picker.pickSingleFolderAsync()).getFilesAsync(),
    file = files.filter(value => value.fileType == ".RMX").pop(),

    zonefiles = files.filter(value => value.fileType.startsWith(".Z"))

    console.log(file.name)

    console.log(zonefiles)

    const openedfile = await file.openAsync(Windows.Storage.FileAccessMode.Read)

    openedfile.createreaderat = at => 
        const reader = new Windows.Storage.Streams.DataReader(this.getInputStreamAt(at))
        reader.byteOrder = Windows.Storage.Streams.ByteOrder.littleEndian
        return reader
    

    let datareader = openedfile.createreaderat(0) //gets type of any

我正在使用 Visual Studio 2017 社区版,并创建了一个 UWP JS 应用。

任何想法 d.ts 文件的外观如何以减轻问题并为我的datareader 提供适当的类型?

我假设这样的东西应该可以工作,但它给了我语法错误:

window.onload = async () => 
    const openedfile:  ...: Windows.Storage.Streams.RandomAccessStream, 
            createreaderat: (at: number) => Windows.Storage.Streams.DataReader

【问题讨论】:

你需要`createreaderat`方法的类型,如果原始对象不是你的,那么你需要扩展该对象并在d.ts文件中添加具有适当类型的新方法。但是您不需要使用 d.ts 文件。你可以使用at => ...: Windows.Storage.Streams.DataReader; @jcubic 如果可能的话,我想保留用 js 编写的内容,但在附加文件 d.ts 中添加类型。 什么是Storage.Pickers.FolderPicker?这是一个库是 d.ts 文件还是 typescript 类中的这个接口? openedfile的类型是什么?它是否存在于.d.ts 文件中?如果是这样,您可以将其添加到您的帖子中吗? (如果.d.ts 不太大,最好发布所有相关的现有类型,FolderPicker 及其定义中使用的类型)。 这是 UWP。这两个标识符都存在于 SDK 随附的 .d.ts 文件中。我的意思是第二个openedfile 继承自方法调用。 【参考方案1】:

试试这个...

openedfile.createreaderat = at => <Windows.Storage.Streams.DataReader>(
    const reader = new Windows.Storage.Streams.DataReader(this.getInputStreamAt(at));
    reader.byteOrder = Windows.Storage.Streams.ByteOrder.littleEndian;
    return reader;
);

【讨论】:

以上是关于如何在 lambda 中为局部变量创建类型定义?的主要内容,如果未能解决你的问题,请参考以下文章

39 py函数作用域递归函数 变量作用域局部函数 使用lambda

如何在 lambda 表达式中使用局部变量

在jsp中的局部和全局变量

在jsp中的局部和全局变量

C++ lambda表达式(函数指针和function)

C++局部变量扩展成全局变量 extend