我想知道如何将此Javascript代码更改为TypeScript:
var storage = require('@google-cloud/storage')();
var myBucket = storage.bucket('my-bucket');
var file = myBucket.file('my-file');
file.makePublic(function(err, apiResponse) {});
我一直试图改变它:
import * as storage from '@google-cloud/storage';
const myBucket = storage.Bucket('my-bucket');
const file = myBucket.file('my-file');
file.makePublic(function(err, apiResponse) {});
但是,Visual Studio Code是此行的基础(粗体):
const myBucket = storage.Bucket('my-bucket');
如果我将鼠标放在带下划线的行上,我会收到以下消息:
[ts]'typeof Bucket'类型的值不可调用。你的意思是 包括'新'? class Storage.Bucket
所以,我想我必须使用关键字new来实例化该类,但该行仍然由Visual Studio Code(粗体)加下划线:
const myBucket = new storage.Bucket('my-bucket');
这次错误消息发生了变化:
[ts]预期2个参数,但得到1.构造函数 Storage.Bucket(存储:storage.Storage,name:string):storage.Bucket
根据错误,我需要使用两个参数。一种存储类型和一种字符串类型。我已经有了第二个(字符串类型)。我不知道如何创建存储空间。
如何创建第一个参数(存储类型)?
如果我们看到Javascript示例,它只询问第二个参数(字符串类型)。 Javascript代码以某种方式推断或具有存储类型的默认值。是否可以在相同代码的TypeScript版本中执行相同的操作?
感谢您的帮助。
答案 0 :(得分:1)
storage
是一个函数:
import * as storage from '@google-cloud/storage'
const myBucket = storage().bucket('my-bucket')
您可能需要将参数传递给storage()
,以使其按您希望的方式运行。请参阅API doc。
如果您使用的是Firebase并希望访问项目默认存储,您还可以通过Firebase Admin SDK获取存储区实例:
import * as admin from 'firebase-admin'
const myBucket = admin.storage().bucket()
答案 1 :(得分:0)
您必须从谷歌云存储中获取公共网址
github中的明确指令=>只需将import转换为typescript import
import * as Storage from '@google-cloud/storage'
import * as config from '../config';
const CLOUD_BUCKET = config.get('CLOUD_BUCKET');
const storage = Storage({
projectId: config.get('GCLOUD_PROJECT')
});
const bucket = storage.bucket(CLOUD_BUCKET);
function getPublicUrl (filename) {
return `https://storage.googleapis.com/${CLOUD_BUCKET}/${filename}`;
}
file.makePublic().then(() => {
req.file.cloudStoragePublicUrl = getPublicUrl(gcsname);
next();
});
https://cloud.google.com/nodejs/getting-started/using-cloud-storage